C中引用2D数组到函数和逗号分隔语句的其他最佳或更好的方法
这是我找到的一种通过地址进行引用的方法,我知道还有很多其他方法,有人能列出其他方法吗?如何有效地进行2D引用??我的代码有点破旧,所以有人能建议其他方法吗?逗号分隔的语句在第二个while循环中是如何工作的???编译器如何处理这些语句有任何特殊情况 有人能列出其他方法来有效地进行二维参照吗 最简单的方法是用更传统的s[i][j]替换指针算术**s+i+j中的练习:C中引用2D数组到函数和逗号分隔语句的其他最佳或更好的方法,c,pointers,multidimensional-array,C,Pointers,Multidimensional Array,这是我找到的一种通过地址进行引用的方法,我知道还有很多其他方法,有人能列出其他方法吗?如何有效地进行2D引用??我的代码有点破旧,所以有人能建议其他方法吗?逗号分隔的语句在第二个while循环中是如何工作的???编译器如何处理这些语句有任何特殊情况 有人能列出其他方法来有效地进行二维参照吗 最简单的方法是用更传统的s[i][j]替换指针算术**s+i+j中的练习: 这种选择的一个结果是行大小调整宏将不再工作;数组大小调整宏,即确定行数的宏将继续工作。另一个结果是,您将无法再声明比初始值设定项更多
这种选择的一个结果是行大小调整宏将不再工作;数组大小调整宏,即确定行数的宏将继续工作。另一个结果是,您将无法再声明比初始值设定项更多的项,因为其余项将被设置为空指针,从而打破打印循环。您是否有急事?我只是想确定长度,而无需将其传递给使用*s[10]和s[20][10]尝试过的模块和**s但循环甚至没有继续。len返回为0,因此在此结束,所以还有其他方法。@dasbLinkedLightThank@dasbLinkedLight将2D数组传递给函数的其他方法为什么字符串长度**s在这里和字符串长度*s[10]不起作用,这些方法产生错误的结果。这是传递它的方法还是规则。@Krishnasundar看一下编辑,它显示了如何初始化指针数组。
#include<stdio.h>
#include<stdlib.h>
int string_length(int (*s)[10], int L, int W)
{
int len = 0;
int i, j;
for (i = 0; i < L; i++)
{
for (j = 0; j < W; j++)
{
len++;
printf("%d ", *(*(s + i) + j));
}
printf("\n");
}
return len;
}
int main(int argc, char** argv)
{
int str[20][10] =
{
{ 2, 1, 3, 1, 1, 1, 1, 1, 1, 1 },
{ 2, 1, 3, 1, 1, 1, 1, 1, 1, 1 },
{ 2, 1, 3, 1, 1, 1, 1, 1, 1, 1 },
{ 2, 1, 3, 1, 1, 1, 1, 1, 1, 1 },
{ 2, 1, 3, 1, 1, 1, 1, 1, 1, 1 }
};
printf("the sizeof this 2d array will be %lu \n", sizeof(str));
printf("the length of the strings will be %lu \n",
sizeof(str) / sizeof(str[0]));
printf("the width of the each string %lu \n",
sizeof(str[0]) / sizeof(str[0][0]));
printf("the result is %d \n",
string_length(str, sizeof(str) / sizeof(str[0]),
sizeof(str[0]) / sizeof(str[0][0])));
int i = 0;
while (i < 10)
printf("hello %d\n", i), i++;
return 0;
}
for(i=0;i<L;i++) {
for(j=0;j<W;j++) {
len++;
printf("%d ", s[i][j]); <<== Here
}
printf("\n");
}
int string_length(int **s,int L,int W) {
... // This code does not change from the above
}
int *str[5]={
(int[]){2,1,3,1,1,1,1,1,1,1},
(int[]){2,1,3,1,1,1,1,1,1,1},
(int[]){2,1,3,1,1,1,1,1,1,1},
(int[]){2,1,3,1,1,1,1,1,1,1},
(int[]){2,1,3,1,1,1,1,1,1,1}
};
printf("the result is %d \n",string_length(str, 5, 10));