Tag: 数组

++ * argv,* argv ++,*(argv ++)和*(++ argv)之间的区别

目前我正在学习C并试图了解这些说明。 他们真的不一样吗? ++*argv *argv++ *(++argv) *(argv++) 谢谢!

试图在循环中访问数组元素会导致分段错误,为什么?

我正在尝试创建一个二维数组,其中每个坐标都随机分配1或0。 它工作得很好,直到它到达坐标[20] [3]。 之后,它只是抛出“分段错误11”。 我绝对不知道怎么或为什么。 特别是因为我可以创建一个200 * 200的矩阵,但它仍然只在坐标[200] [3]处得到相同的问题。 所以它总是在最后一个x坐标中出现错误的第三个y坐标。 #include #include int main() { int x, y, i, j ; x = 20; y = 20; int grid [x][y]; for ( i = 0; i <= x; i++) { for ( j = 0; j <= y; j++) { grid[i][j] = rand() % 2 […]

删除数组中的重复项

我制作了一个程序来删除数组中的重复项,但程序的if条件始终保持为真。 我明白了问题是什么,将arr [i]更改为arr [count]并通过malloc分配内存,但程序按原样打印数组而不删除重复项。 # include # include int count=0; void Delete(int *arr); void Search(int *arr); int main() { int i; int *arr; arr=(int*)malloc(sizeof(int)); clrscr(); printf(“Enter array and press -1 to stop:\n”);/*stops when -1 occurs*/ for(count=0; ;count++)/*count is the count of the numbers*/ { scanf(“%d”,&arr[count]); realloc(arr,sizeof((int)+count)); fflush(stdin); if(*(arr+count)==-1)/*This condition is never true.*/ break; } Search(arr); […]

从C中的函数返回数组

由于某种原因,我的函数只返回我的数组中的第一个元素,我无法弄清楚为什么数组的其余部分超出范围。 该函数接受两个整数数组,添加它们各自的元素,并将总和放入返回的第三个数组中。 这是我的代码: #include /* count digits, white space, others */ int *sumarrays(int arr1[], size_t arr1len, int arr2[], size_t arr2len); void main() { int arr1[10]; size_t arr1len = 10; int arr2[10] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; size_t arr2len = 10; int i; int *x; arr1[0] = 2; […]

将指针指针的指针理解为函数中的参数

在尝试自己学习C的同时,我遇到了这个我想要开发的简单程序。 它只是试图利用指向指针数组的指针来制作类似于矩阵的东西。 我在Windows上编译,当我运行它时,它只是崩溃,同时,在Linux上尝试这个代码它说segmentation fault ,这是因为函数参数是数组吗? 我在这做错了什么? #include #include void initializeArray(float** array, int size); void printArray(float** array, int size); int main() { float** array_1 = NULL; int array_size = 3; initializeArray(array_1, array_size); // Free memory from array for (int i = 0; i < array_size; i++) { free(array_1[i]); } free(array_1); return 0; } void initializeArray(float** array, […]

将一个字符数组分配给另一个给出错误。 为什么?

数组的名称是指向第一个元素的指针。 那么为什么一个字符数组不能分配另一个数组呢? #include int main() { char str1[]=”Hello”; char str2[10]; char *s=”Good Morning”; char *q; str2=str1; /* Error */ q=s; /* Works */ return 0; }

C程序从字符串数组中提取不同的子字符串

我想从包含字符串数组的文件中提取不同的子字符串。 我的文件类似于此。 abcdxxx efghijkyyy lmzzz ncdslanclsppp kdfmsqqq cbskdnsrrr 从上面的文件我想提取xxx,yyy,zzz,ppp,qqq,rrr(基本上是最后3个字符)并存储到数组中。 我提到这个链接如何从C中的字符串中提取子字符串? 但感觉不可行,因为我文件中的内容是动态的,可能会因下次执行而改变。 有人可以简要介绍一下吗? 这是我的方法 FILE* fp1 = fopen(“test.txt”,”r”); if(fp1 == NULL) { printf(“Failed to open file\n”); return 1; } char array[100]; while(fscanf(fp1,”%[^\n]”,array)!=NULL); for(i=1;i<=6;i++) { array[i] += 4; }

当我们用c中的字符串文字初始化一个char数组时,是否会发生垃圾收集?

当我们在C中编写以下代码行时, char local_arr[] = “I am here”; 文字“我在这里”被存储在内存的只读部分(比如RM )。 我如何想象它是如何在RM中连续存储的(是吗?)。 然后,数组local_arr (即本地数组)通过索引从RM中的位置复制此数组索引。 但是在local_array复制之后,文字会发生什么? 它是否丢失从而导致内存泄漏? 或者是否有类似Java的垃圾收集器来清理未引用的对象? 例如,如果我写一段代码如下: for(int i=0;i<100000;i++) char local[] = "I am wasting memory"; 我不会用完记忆吗? 每次迭代都会在每次迭代时创建相同文字的新实例吗? 或者他们都会引用相同的文字,因为每次文字的价值是相同的? RM是属于堆内存还是堆中的专用段? 本地数组也存储在堆栈中,对吧? 如果我使用动态数组或全局数组怎么办? 那么会发生什么?

是否应使用C中的文字初始化具有指定大小的静态声明字符数组?

例如, gcc编译好了…… char s[7] = “abc”; 但它给出了错误“赋值不兼容的类型”与… char s[7]; s = “abc”; 有什么不同?

多个realloc比巨大的malloc更昂贵吗?

我使用动态数组来表示最小堆。 有一个循环可以删除最小值,并将随机元素添加到最小堆中,直到出现某种情况。 虽然我不知道堆的长度在运行时会如何变化(有很多随机性),但我知道上限,即1000万。 我有两个选择: 1)使用malloc声明一个小数组,然后当堆中的元素数量超过长度时调用realloc。 2)使用malloc声明一个1000万条目数组。 这避免了调用realloc。 题 选项2比选项1更有效吗? 我用我的代码测试了这个,并且使用2似乎有显着的(20%)运行时间减少。这是因为代码中的随机性而估计的。 使用malloc预先声明一个大型的10-50万个入口arrays有什么缺点吗?