Tag: 数组

变量大小的数组与C中的calloc

关于动态内存的讨论: “C指针和动态内存简介” 作者说: 像这样的存储块可以有效地用作更灵活的arrays。 在现实世界的C程序中,这种方法实际上更为常见。 它比“可变大小arrays”更具可预测性和灵活性 他正在讨论的内存块类型是这样的: const int size = 5; int * array = calloc(size, sizeof(int)); 然后使用另一个指针迭代数组: int * index = array; for (i = 0; i < size; i++) { *index = 1; // or whatever value index++; } 我的问题是这个方法比这样的标准变量大小的数组更好吗?: int array[variable]; 或动态的: char name[] = “Nick”; 作者并没有真正阐明为什么我更喜欢前一种方法而不是后一种方法。 或者更具体地说:它如何更“可预测和灵活”?

检查数组中是否存在值

我想知道如何检查数组中是否存在值或对象,如python: a = [1,2,3,4,5] b = 4 if b in a: print(“True!”) else: print(“False”) 但我想知道cython中是否已存在某些内容。 我有一个指针的struct对象数组,想知道该数组中是否存在该对象。 喜欢 cdef Node *array array = malloc( 5 * cython.sizeof(Node)) for i in range(5): array[i].index = i cdef Node test = array[3] if test in array: print(“True!”) cdef struct Node: int index 下面的代码不正确,但它是为了说明我的意思。

C中的hex到char数组

给定一串hex值,例如“0011223344”,使其为0x00,0x11等。 如何将这些值添加到char数组? 相当于: char array[4] = { 0x00, 0x11 … };

结构数组替换自身的值

好的,所以我有下面的代码,我只是从文件中提取各种东西,并在结构数组中输入它们,它“看似”最初工作,但是当我完成文件后,我打印它似乎已经用最后一个谷替换了所有的课程和名称,奇怪的是这不会发生整数(成绩),成绩确实得到了正确的输入。 #include #include #include struct student { char *name; char *course; int grade; }; void courseSort(struct student d[20], int size); int main(void) { FILE* fp; char* filename = “grades.csv”; char buffer[100]; char* name, *class; char* del=”,”; int grade, i, counter=0; struct student d[20]; if((fp=fopen(filename, “r”))==NULL) { printf(“unable to open %s\n”, filename); exit(1); } while(fgets(buffer, sizeof(buffer), […]

C指针和数组/’sizeof’运算符

可能重复: char指针和数组的堆栈指针差异 为了说明我的问题: int main(void){ int myary[20]; int *myaryPtr; myaryPtr = myary; sizeof(myary); // Will it return 80? Correct? sizeof(myaryPtr); // Will it return 4? Correct? return 0; } 首先,我的假设是正确的吗? 然后假设我的假设是正确的,详细解释是什么? 我明白我的20个元素数组是80个字节,但是myary这个名字不仅仅是指向数组第一个元素的指针吗? 所以不应该是4吗?

C数组声明和赋值?

我在这里问了一个关于结构的类似问题,但是我试图弄清楚C如何处理分配变量的事情,以及如果它们在function上相同的话,不允许将它们分配给彼此的原因。 可以说我有两个数组: int x[10]; int y[10]; 为什么x = y不能编译? 如果它们都是相同的“签名”,那么你不应该来回分配它们吗? 我是否可以通过允许我在C中执行此操作的方式声明这些内容? 你能够做到这一点对我有意义,但也许有办法可以做到这一点? 结构的Typedef似乎是解决方案,它对于数组声明和赋值是否相同? 我感谢你们的帮助,我是Stackoverflow的新手,但到目前为止它对我来说是一个非常好的资源!

由变量给出的C数组大小

我今天发现一些代码让我困惑。 它做了这样的事情: #include int main(int argc, char **argv) { int x = 5; int foo[x]; foo[0] = 33; printf(“%d\n”, foo[0]); return 0; } 我的问题是为什么这有效? 数组foo在堆栈上,那怎么可以用x扩展呢? 我本以期待这样的事情: #include int main(int argc, char **argv) { int x = 5; int foo[] = malloc(sizeof(int)*x); foo[0] = 33; printf(“%d\n”, foo[0]); free(foo); return 0; } 我并不奇怪,这不是更漂亮或者更好。

在char中为char数组赋值

有什么区别: char fast_car[15]=”Bugatti”; 和 char fast_car[15]; fast_car=”Bugatti”; 因为第二个导致编译错误: 错误:从类型’char *’分配类型’char [15]’时出现不兼容的类型 虽然第一个工作正常。 将数组中的字符串放在与数组初始化不同的位置会很有帮助。

c中数组的大小

一个让我烦恼的简单问题。 假设我在main中定义了一个数组,如int arr[5] 。 现在,如果我仍然在main中并且我设置int i = sizeof(arr)/sizeof(arr[0])然后我被设置为5,但是如果我将数组作为函数参数传递并且完全相同在这个函数中计算,我得到一个不同的数字。 这是为什么? 起初我认为它是因为在一个函数arr是一个指针,但据我所知, arr也是一个指针在主内部! 此外,如果我做一些非常相似的事情,我只是动态地初始化数组,我得到了奇怪的结果: int *arr = (int*) malloc(sizeof(int) * 5); int length = sizeof(*arr) / sizeof(arr[0]); printf(“%d\n”,length); 输出为1 。 有什么想法吗? 提前致谢!

将char数组转换为C中的int数

我想转换一个char数组[],如: char myarray[4] = {‘-‘,’1′,’2′,’3′}; //where the – means it is negative 所以它应该是整数:-1234使用C中的 标准库。 我找不到任何优雅的方式来做到这一点。 我可以肯定附加’\ 0’。