1

只是从 stroustrup 中提取:声明和初始化字符串数组的指针。我可以

char *test1[]={"ddd"}

但不能

char (*test)[] ={"dfsdf"}.

这些声明之间有什么区别以及如何初始化第二个?

4

2 回答 2

1

首先是指向 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会为您提供指向的数组。

于 2013-01-24T06:01:12.753 回答
0

您已经使用以下代码创建了一个指针数组:

char *test1[]={"ddd"};

下面的代码是一个指向数组的指针。 "ddd"隐含地是一个字符数组。

char *test1 = "ddd";
于 2013-01-24T06:03:39.063 回答