char(* test)[] vs char * test1 []之间的区别以及如何优雅地初始化测试?

时间:2013-01-24 05:58:43

标签: c++

从stroustrup中删除:声明并初始化字符串数组的指针。 我能做到

char *test1[]={"ddd"}

但不能

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

这些声明之间的区别是如何初始化第二个?

2 个答案:

答案 0 :(得分:1)

首先是指向char类型的指针数组 第二个是指向char类型数组的指针。

这个小 code snippet 应该很好理解差异:

#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]&amp; test1[1]允许您获取指向的内容。

test2是指向另一个数组的指针。取消引用指针*test2可以指向指向的数组。

答案 1 :(得分:0)

您已使用以下代码创建指针数组

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

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

char *test1 = "ddd";