我在这里做错了什么?第一个就像一个魅力第二个崩溃。
char *t[3][4] = {
{"one", "two", "three", "Four"},
{"Five", "Six", "Seven", "Eight"},
{"Nine", "Ten", "Eleven", "Twelve"}
};
int i,j;
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
printf("%s\n",t[i][j]);
}
}
只想在函数中使用相同的数组:
foo(t, 3, 4);
char **foo(char **t, int row, int col) {
int i,j;
for (i=0;i<row;i++) {
for (j=0;j<col;j++) {
printf("%s\n",t[i][j]);
}
}
}
处理终止,状态为-1073741510(0分钟,8秒(s));
答案 0 :(得分:2)
处理指针很麻烦,特别是对于字符串矩阵。最好以编译器清楚地知道传递给它的方式来编写函数。
将您的功能签名更改为void foo(int row, int col, char* t[][col]) { ... }
,并相应地将您的功能称为foo(3, 4, t);
。你清楚地告诉编译器传递了什么。
答案 1 :(得分:0)
这是我与char **foo(char **t, int row, int col)
合作的代码。问题是我有一个**数组,其指针指向它的开头,你不能像一个简单的2d数组那样遍历它,如t [i] [j]。但是您可以使用i * col来到达您想要的行,而j是在第i行中定位第j个元素。
另外请注意,包含字符串的大小并不重要,因为您在数组中有地址。感谢有用的评论女巫让我得到了正确的答案。
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
{
printf("%s",*(t+i*col+j));
}
}