Tag: 数组

通过引用将二维数组传递给函数(C编程)

我正在学习指针,现在卡住了一个小时,用这段代码, #include int determinant(int **mat) /* int mat[3][3] works fine.. int *mat[3] doesn’t.. neither does int *mat[] */ { int det; int a=*(*(mat+0)+0); // printf(“\n%d”,a); int b=*(*(mat+0)+1); // printf(“\n%d”,b); int c=*(*(mat+0)+2); // printf(“\n%d”,c); int d=*(*(mat+1)+0); // printf(“\n%d”,d); int e=*(*(mat+1)+1); // printf(“\n%d”,e); int f=*(*(mat+1)+2); // printf(“\n%d”,f); int g=*(*(mat+2)+0); // printf(“\n%d”,g); int h=*(*(mat+2)+1); // printf(“\n%d”,h); int i=*(*(mat+2)+2); […]

C ++ – 通过函数返回2D数组

我环顾四周试图找出是否应该在C ++中返回一个二维数组,但得到的答案却很复杂。 一些答案说不,因为数据是函数的本地数据,当它返回时,数组指向“垃圾数据”(因为它可以随时被覆盖)。 但是,有些人说“是的,就像一个正常的数组一样返回它”。 所以,我的困境: 我有一个2D数组,其中包含指向Tile对象的指针 Tile* map[128][128]; 我应该在函数中返回数组吗? 为什么或者为什么不? 如果答案是肯定的,我该怎么做? 编辑:我不清楚。 我想制作一个getter方法来返回map变量,并能够在另一个函数中使用数组中的指针。

可以通过值传递数组到递归函数吗?

我想编写一个递归函数,为问题构建所有可能的解决方案。 我想我应该传递一个数组,然后,在每个递归步骤中,将它设置为该递归步骤中可能的所有值,但后来我开始想知道这是否可行,因为C通过传递指针传递数组。 你通常如何处理这个问题? 我正在考虑这些问题。 根据选择的路径,数组将采用许多不同的值。 我想我们真正想要的是按值传递数组。 recFunc(int* array, int recursiveStep) { for (int i = 0; i < a; i++) { if (stopCondition) { doSomething; } else if (condition) { array[recursiveStep] = i; recFunc(array, recursiveStep+1); } } }

如何处理从复杂输入中提取双重类型数字(字符串)

祝大家好日子, 我对C编程很陌生,我偶然发现了一个问题,试图在几天内正确地解决,但仍然没有令人满意的结果。 我试图从这个forms的输入中提取一些double值{[ 5.1 ; 4 ], [15.3 ; -3.2] } {[ 5.1 ; 4 ], [15.3 ; -3.2] } {[ 5.1 ; 4 ], [15.3 ; -3.2] } 。 我尝试了很多方法,到目前为止最好的方法是我使用fgets()读取用户输入作为字符串,使用for循环,如果isdigit()看到一个数字我将它存储在另一个字符串中,然后我检查是否有在数字后面点,如果有,那么我把它放在数字后面的字符串,依此类推。 真正的问题是,当我想输出结果字符串并使用strtod()将其转换为我想要的double ,它只有在用户首先输入一些数字时才有效,但是如果输入看起来像{ [ 2.5 ; 1 ] } { [ 2.5 ; 1 ] }代码只是不关心,什么都不做。 任何帮助或见解将不胜感激,也许我采取了错误的方法? 谢谢。 我的代码 #include #include #include #include #include #define […]

如何将从文件中读取的字符串拆分为C中的数组

我有一个简单的文件,其中包含100个文件名列表及其相应的大小,如下所示: file1.txt, 4000 file2.txt, 5000 等等。如何逐行读取文件,然后将文件名列表存储到char数组中,然后将大小列表存入int数组? 我试图像这样使用sscanf,但这不起作用。 我得到一个段错误: main(){ char line[30]; char names[100][20]; int sizes[100]; FILE *fp; fp = fopen(“filelist.txt”, “rt”); if(fp == NULL){ printf(“Cannot open filelist.txt\n”); return; } while(fgets(line, sizeof(line), fp) != NULL){ sscanf(line, “%s, %d”, names[i][0], sizes[i]); printf(“%d”, sizes[i]); i++; } }

尝试递增数组时出现“左值”错误

可能重复: 数组名是C中的指针吗? 假设我有一个char数组,说arr和arr将代表第一个元素的地址,所以arr ++应该是完全合法的,那么为什么编译器会说’左值’。 如果我这样做:arr = arr + 1那么为什么它是无效的转换。 我只是一个一个地增加指针。 编译器告诉LHS操作数类型是char [4]但是在RHS上它是char *。 main() { char arr[]={‘a’,’b’,’c’,’d’}; for(;arr!=arr+4;arr++) //lvalue required printf(“%c”,*arr); }

在C中使用strsep()和动态字符串数组

我有以下代码: #include int main(void) { char *buffer = NULL, **words = NULL, *aPtr = NULL, *sPtr; int count = 0; buffer = strdup(“The quick brown fox jumps over the lazy dog”); sPtr = buffer; do { aPtr = strsep(&sPtr, ” “); words[count++] = … // missing code } while(aPtr); return 0; } 你可以在上面看到我错过了一些代码……是否有任何类型的strdup()适用于这种情况? strdup()函数本身似乎不起作用……如果没有,我怎样才能使这段代码工作? 指针指针对我来说很头疼……

什么是常数arrays?

什么是常数arrays? 如果我们定义 const char hex_char[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’ }; 然后,它不应该被程序修改; 这是什么意思?

free将不会删除分配给指针的内存(int数组),使用免费的两次工作,为什么?

这是出于好奇,我试图在以前的问题上找到我怀疑的答案,但他们似乎没有答案。 所以问这里,我刚写了一个代码,我试图将内存分配给一个int指针(填充数组)并将int值扫描给它。 完成数组后,我想删除分配给指针的数据/内存。 虽然我的代码工作得很好,但是为什么我仍然可以在释放指针之后看到int数组中的值。 然而,如果我使用两次免费它会引发错误(这是在单次使用免费后预期的)。 这不是一个奇怪的行为吗? 我在我的Mac上尝试使用Xcode也在codechef,同样的行为,为什么? int *num=(int *)malloc(n*sizeof(int)); int i; for(i=0;i<n;i++) { scanf("%d",&num[i]); } for(i=0;i<n-1;i++){ temp = some_function(x); } free(num); for(i=0;i<n;i++) { printf("\nnum[%d]= %d\n",i,num[i]); } 上面的代码打印num []内的值,理想情况下它不应该。

在数组C中找到最大的2×2“平方”值

对于我的任务,我必须接受一组值,将它们保存到第二个数组并打印出4个最高值的“正方形”。 这意味着“square”,其元素之和在数组中最大。 Example: Given the array 1 2 3 4 5 6 7 8 9 10 11 12 the output should be 7 8 11 12 我最初尝试使用嵌套for循环集来查找并将每个后续最大值存储到第二个数组中,但似乎无法找出正确的算法。 到目前为止,我只给了我相同的值(在这个例子中,12)。 另外,我已经意识到这种方式不允许我在第二个数组中保持格式相同。 我的意思是,如果我保存在数组b [0] [0]中找到的最大数字,它将在错误的位置,我的方块将关闭,看起来像: 12 11 10 9 这是我到目前为止所拥有的: int main(){ int og[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, new[2][2]={}, rows; int columns, i, high,j,high2,high3,high4; high = new[i][0]; high2= high – 1; high3= […]