C语言中的“ char * A []”和“ char ** A”有什么区别?


回答 1:

char * a []是char类型变量的指针数组,而char ** a定义了一个指向char类型变量的指针变量的指针。

例如

char c ='a'; // c的值= 2

字符* p =&c;

//指针p指向c变量

char ** pp =&p;

// pp指向指向变量c的指针p

有关更多信息,请参见URL:http://www.thegeekstuff.com/2012 ...


回答 2:

char * A []是一个数组,而char ** A是一个指针。在C语言中,数组和指针通常可以互换,但是有一些区别:

1.使用“ char * A []”,您不能将任何值分配给A,而只能分配A [x];

使用“ char ** A”,您可以将值分配给A,也可以分配A [x]。

2.使用“ char * A []”,可以初始化一个数组(例如char * A [] = {“ foo”,“ bar”};),并使用sizeof(A)来获取大小(在64位上机器,上面的示例为您提供16,因为它是两个char *的数组;

使用“ char ** A”时,sizeof(A)始终返回指针的大小(在64位计算机上为8)。


回答 3:
  1. char * []表示“指向chars的指针数组”,而char ** A表示“指向char的指针的指针”。请注意,第一个明确告诉您我们正在使用数组,而第二个则不能保证。但是,从构造上来说,两者都等效于C,因为数组是作为指向该数组中第一个元素的指针存储的。指向指针的指针不一定是指针数组。为了说明这一点,请注意,对于指针数组arrp,可以分配char ** A =(char **)(void *)arrp,但不能(即,它会引发编译器错误)char * A [] =( char * [])(void * [])arrp; -实际上,您不能在不给其长度参数的情况下实例化和数组,也不能仅将指针转换为数组

回答 4:

例如,第一个是指向第一个元素(也称为数组)的指针[1],第二个可以是指向字符串数组[2]的指针的类型。

换句话说,数组无论如何都会衰减到指针,因此仅是语法糖(只要在数组的情况下您忽略大小分配的请求)

[1]与int *不同,char *是通用指针类型。

[1]字符串本身以null终止的数组形式传递。

有关更多示例,请参见

肯·格雷格(Ken Gregg)的答案:何时应在C主程序的argv-中定义双指针作为参数?

谢尔盖·祖布科夫(Sergey Zubkov)对C语言中的数组的数组是否可行?

约翰·米勒(John L. Miller)对C语言中的数组的数组是否可行?