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:
- 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语言中的数组的数组是否可行?