【发布时间】:2019-11-13 10:25:48
【问题描述】:
为什么这个函数有效
#include <stdio.h>
#include <string.h>
void print_array(char **array, size_t size)
{
for (int i = 0; i < size; i++) {
printf("%s\n",array[i]);
}
}
int main()
{
char *base_data[] = {
"sample 1",
"sample 2",
"sample 3"
};
print_array(base_data,sizeof(base_data)/sizeof(char*));
return 0;
}
但是这段代码没有
#include <stdio.h>
#include <string.h>
void print_array(char **array)
{
for (int i = 0; i < sizeof(array)/sizeof(char*); i++) {
printf("%s\n",array[i]);
}
}
int main()
{
char *base_data[] = {
"sample 1",
"sample 2",
"sample 3"
};
print_array(base_data);
return 0;
}
打印第一个值后程序崩溃。无论我尝试什么,我都无法在函数调用中找到指向字符串的指针数组的大小。大多数 stackoverflow 示例还将数组的大小传递给函数。将字符串指针数组传递给函数时会发生什么情况?
【问题讨论】:
-
数组传入函数时会衰减为指针。
-
char **array声明一个指针,而不是一个数组。该变量名为array,,但这并不重要。 -
sizeof(array) 始终是代码中指针的大小,因此等于 sizeof(char*)
-
您所拥有的只是一个(一维)指向字符的指针数组。同样的逻辑也适用。
标签: c arrays function pointers sizeof