我有以下python代码:
r = range(1,10)
r_squared = []
for item in r:
print item
r_squared.append(item*item)
如何将此代码转换为C?在C中有类似可变数组的东西,或者我将如何做与python追加相同的东西?
答案 0 :(得分:3)
Homogenous
int arr[10];
int i = 0;
for(i=0;i<sizeof(arr);i++)
{
arr[i] = i; // Initializing each element seperately
}
尝试在C中使用vectors
,请完成此link
/ vector-usage.c
#include <stdio.h>
#include "vector.h"
int main() {
// declare and initialize a new vector
Vector vector;
vector_init(&vector);
// fill it up with 150 arbitrary values
// this should expand capacity up to 200
int i;
for (i = 200; i > -50; i--) {
vector_append(&vector, i);
}
// set a value at an arbitrary index
// this will expand and zero-fill the vector to fit
vector_set(&vector, 4452, 21312984);
// print out an arbitrary value in the vector
printf("Heres the value at 27: %d\n", vector_get(&vector, 27));
// we're all done playing with our vector,
// so free its underlying data array
vector_free(&vector);
}
答案 1 :(得分:1)
默认情况下,C中的数组是可变的,因为你可以编写a[i] = 3
,就像Python列表一样。
然而,与Python列表不同,它们是固定长度的。
对于你的问题,那应该没问题。你知道你想要的最终尺寸;只需创建该大小的数组,并分配给成员。
但是,当然 需要append
存在问题。
为可附加数组编写一个简单的库(就像Python列表一样)对于C来说是一个非常好的学习项目。如果这是你想要的,你也可以找到很多现成的实现,但不是标准的库。
关键是不使用堆栈数组,而是使用malloc
在堆上分配的内存。跟踪指向该内存的指针,容量和使用的大小。当使用的大小达到容量时,将其乘以某个数字(使用不同的数字来了解它们如何影响性能),然后realloc
。这就是它的全部内容。 (如果你看一下CPython source for the list
type,那基本上和它一样。)
这是一个例子。您希望添加一些错误处理(malloc
和realloc
可以返回NULL
),当然还有append
以外的其他API(尤其是{{} 1}}函数,它将在已分配的内存上调用delete
,但这应该足以向您展示这个想法:
free
答案 2 :(得分:0)
c没有任何方法可以动态增加数组的大小,就像在python中一样。这里的数组是固定长度的
如果你知道你将要使用的数组的大小,你可以使用这种声明,比如
int arr[10];
或者如果您想要动态添加memery(在运行时),请使用malloc调用以及结构(链接列表)