Tag: 数组

在C中初始化数组

在C中,我已经读过,半初始化的数组将用其余元素填充零(不管整数或字符数组)。 例如: int arr[10] = {3}; 如果初始化, arr[4]将为0,如果未初始化,则为垃圾值。 我的问题是,根据编译器选项,上述所有C编译器(或)的附加工作是否可能会发生或不发生? 我在Code composer studio(TI的IDE)工作。 我想确保这适用于所有案例和所有编译器。

动态内存分配

我在为数组动态分配内存时遇到了麻烦。 我已经调试了几个小时,没有任何指针? 我发布了剩下的代码。 它应该简单地将交换第一行与第二行交换,第三行与第四行交换。 我得到了奇怪的结果,如: 输入字符串:hello 输入字符串:你好吗? 输入字符串:我很好,谢谢 输入字符串:再见 输入字符串:bai 输入字符串:xx ========================= 你好吗 !我很好谢谢 你好 !你好吗 再见 !白 我很好谢谢 !再见 白 !XX int count = 0; char *lines[MAX_LINES]; char *tmp[50]; printf(“Enter string: “); fgets(tmp, 50, stdin); lines[count] = (char *) malloc((strlen(tmp)+1) * sizeof(char)); strcpy(lines[count], tmp); while(strcmp(“xx\n”, lines[count])){ count++; printf(“Enter string: “); fgets(tmp, 50, stdin); lines[count] […]

在c中反转数组

我检查了一些在C中反转数组的video,因此我知道我的逻辑是正确的。 这是我的代码: #include void reverse( int arr[], unsigned int len ) { int i=0; int n=len; int j=len-1; int temp; while (i<n) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; i++; j–; } } void reverse( int arr[], unsigned int len ); int main( void ) { int a[] = {11, 19, 13}; unsigned int len = 3; reverse( […]

2D数组传递给函数

我一直在阅读这个问题,但我无法得到结果代码来解决问题。 我应该如何更改它以使其工作? void print2(int ** array,int n, int m); main() { int array[][4]={{1,2,3,4},{5,6,7,8}}; int array2[][2]={{1,2},{3,4},{5,6},{7,8}}; print2(array,2,4); } void print2(int ** array,int n,int m) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%d ",array[i][j]); printf("\n"); } }

我希望这会崩溃,但事实并非如此

我是一个80年代的老黑客,我手上有一些空闲时间以为我会’C’大惊小怪 (我的背景是Forth,它做的事情回到了前面所以我学到很多关于强迫很多错误的事情) 在这种情况下,我设置了一个小数组,我认为这将是3个元素的大小(0,1,2) 如果我运行编译,我本以为我会遇到一个越界错误,但是没有 – 它编译好了并且运行得很甜蜜 这一点并不是很匆忙,但对于那个小秃头来说并不好,所有这些都在刮擦。 int main() { char members[3][16]; // 3 elements, each 15 char long plus null printf(“\n enter something.. “); scanf( “%s”, members[4]); printf(“\n and something else.. “); scanf( “%s”, members[5]); printf(” %s “, members[4]); printf(” %s\n”, members[5]); return 0; }

C中的sizeof()函数

main() { char a[] = “Visual C++”; char *b = “Visual C++”; printf(“\n %d %d”,sizeof(a),sizeof(b)); printf(“\n %d %d”,sizeof(*a),sizeof(*b)); } sizeof(a)给出输出: 11 (即字符串的长度) 为什么会这样? 为什么输出sizeof(a) = 4因为当我尝试打印它时,它给我一个地址值,因此是一个整数?

初始化结构中的数组值

我有一个结构,里面有几个数组。 这些数组的类型为unsigned char [4]。 我可以通过调用初始化每个元素 struct->array1[0] = (unsigned char) something; … struct->array1[3] = (unsigned char) something; 只是想知道是否有办法在一行中初始化所有4个值。 解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到struct数组。

数组VS指针到指针的地址:不一样?

我正在使用指针并想出了一个问题。 到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是指向数组的第一个索引的指针(可能是静态指针)。 正确? 所以我想要实现的是创建另一个指针,该指针可以保存数组名称的地址(即指向另一个指针的指针,在我的例子中是数组名称) 例如: char name[] = “ABCD”; // name holding the address of name[0] char *ptr1 = name; // When this is possible char **ptr2 = &name; // Why not this. It give me error that cannot convert char(*)[5] to char** 我正在使用代码块作为IDE。

做最后减少的策略

我正在尝试实现一个OpenCL版本来减少一个float数组。 为实现这一目标,我在网上找到了以下代码段: __kernel void sumGPU ( __global const double *input, __global double *partialSums, __local double *localSums) { uint local_id = get_local_id(0); uint group_size = get_local_size(0); // Copy from global memory to local memory localSums[local_id] = input[get_global_id(0)]; // Loop for computing localSums for (uint stride = group_size/2; stride>0; stride /=2) { // Waiting for each 2×2 […]

为什么编译器没有检测到字符串常量初始化中的越界?

我在一本书中读到了这个问题及其答案。 但我不明白这本书的理由。 下面的代码会编译吗? int main() { char str[5] = “fast enough”; return 0; } 答案是: 是的。如果超出数组的边界,编译器永远不会检测到错误。 我无法得到它。 任何人都可以解释一下吗?