有人可以告诉我为什么两个印刷品的输出都不相同?如何将一个字符串数组传递给函数呢?
main()
{
char b[10][10];
printf("%p, %p, %p\n", b, b[0], b[9]);
getStrListFromString(b);
}
void getStrListFromString(char **strList)
{
printf("%p, %p, %p\n", strList, strList[0], strList[9]);
}
预期输出:
0x7fffbe4ecf00, 0x7fffbe4ecf00, 0x7fffbe4ecf5a
0x7fffbe4ecf00, 0x7fffbe4ecf00, 0x7fffbe4ecf5a
实际输出:
0x7fffbe4ecf00, 0x7fffbe4ecf00, 0x7fffbe4ecf5a
0x7fffbe4ecf00, 0x7fffbe4ecf80, (nil)
答案 0 :(得分:3)
您的函数需要char **
,但您传递char [10][10]
。这些都不一样。
传递给函数的数组衰减为指向第一个元素的指针。因此,当您将char [10][10]
(大小为char [10]
的数组10)传递给函数时,它会衰减为char (*)[10]
(指向char [10]
的指针。
将您的功能更改为接受char [10][10]
或char (*)[10]
。
答案 1 :(得分:2)
除了关于指针指向与多维数组完全无关的核心问题外,你还有其他各种错误:
main() // obsolete form of main(), won't compile unless C90
{
char b[10][10]; // uninitialized
printf("%p, %p, %p\n", b, b[0], b[9]); // should be void pointers
getStrListFromString(b); // wrong type of parameter
// return statement necessary here in C90
}
void getStrListFromString(char **strList) // should not be pointer-to-pointer
{
printf("%p, %p, %p\n", strList, strList[0], strList[9]); // same issue as in main
}
此代码编译意味着您的编译器是完全废话或配置不正确。你需要尽快解决这个问题。
更正后的代码:
#include <stdio.h>
void getStrListFromString(char strList[10][10])
{
printf("%p, %p, %p\n", (void*)strList, (void*)strList[0], (void*)strList[9]);
}
int main (void)
{
char b[10][10];
printf("%p, %p, %p\n", (void*)b, (void*)b[0], (void*)b[9]);
getStrListFromString(b);
}