只是从 stroustrup 中提取:声明和初始化字符串数组的指针。我可以
char *test1[]={"ddd"}
但不能
char (*test)[] ={"dfsdf"}.
这些声明之间有什么区别以及如何初始化第二个?
只是从 stroustrup 中提取:声明和初始化字符串数组的指针。我可以
char *test1[]={"ddd"}
但不能
char (*test)[] ={"dfsdf"}.
这些声明之间有什么区别以及如何初始化第二个?
首先是指向 type 的指针数组char
。
第二个是指向数组类型的指针char
。
这个小代码片段应该很好理解差异:
#include<stdio.h>
#include<string.h>
int main()
{
char *test1[]={"ddd","aaa"};
printf("[%s]",test1[0]);
printf("[%s]",test1[1]);
char arr[]={"bbb"};
char (*test2)[] = &arr;
printf("[%s]",*test2);
return 0;
}
输出:
[ddd][aaa][bbb]
test1
是一个指针数组,这个数组的每个下标都指向字符串。
test1[0]
&test1[1]
允许您获取被指向的内容。
test2
是指向另一个数组的指针。取消引用指针*test2
会为您提供指向的数组。
您已经使用以下代码创建了一个指针数组:
char *test1[]={"ddd"};
下面的代码是一个指向数组的指针。 "ddd"
隐含地是一个字符数组。
char *test1 = "ddd";