C++ 为什么地址被认为是指针?
问题:为什么C++ 为什么地址被认为是指针?,c++,c,arrays,pointers,C++,C,Arrays,Pointers,问题:为什么&ptr的类型是char**?我知道p指向数组的指针,但不是ptrachar*的地址 我已经看过了,在这种情况下,数组是否也被视为指针?您必须循序渐进地理解这一点 char*ptr是指向char的指针,因为它指向的是char p指的是什么 它指向一个字符*。因此,它是指向字符的指针。也就是说,p属于char**类型 数组也被认为是指针吗 不,指针和数组是不同的类型。产生混淆的部分原因是,在许多情况下,指针可能会衰减为数组,而在函数中,类似数组的参数会调整为指针 为什么&ptr的类型
&ptr
的类型是char**
?我知道p
指向数组的指针,但不是ptr
achar*
的地址
我已经看过了,在这种情况下,数组是否也被视为指针?您必须循序渐进地理解这一点
char*ptr
是指向char的指针,因为它指向的是char
p
指的是什么
它指向一个字符*
。因此,它是指向字符的指针。也就是说,p
属于char**
类型
数组也被认为是指针吗
不,指针和数组是不同的类型。产生混淆的部分原因是,在许多情况下,指针可能会衰减为数组,而在函数中,类似数组的参数会调整为指针
为什么&ptr的类型为char**
因为ptr
属于char*
类型。将运算符的地址应用于类型的对象会提供指向该类型的指针
我知道p指向一个数组的指针
不,它指向一个指针,该指针指向数组的一个元素
指向数组的指针是完全不同的类型。例如,此处设置一个指向数组的实指针以指向数组:
char list[] = "World";
char *ptr = list + 2;
char **p = &ptr;
&ptr
是一个char**
仅仅因为ptr
是一个char*
<代码>列表
不是指针,而是数组。但是ptr
被声明为char*
,所以它是一个指针
ptr
是从指针list+2
初始化的。表达式list+2
使用运算符+
,该运算符对其操作数执行数组到指针的转换(如果适用)。因此,在计算list+2
时,使用数组到指针的转换从list
创建指向char
的临时指针。然后,通过向第一个临时指针添加2
来创建另一个临时指针,然后使用第二个临时指针初始化ptr
在大多数情况下,数组的名称“衰减”为指向其第一个元素的指针
在本例中,数组由2个字节组成。它的名称list
是一个指向W
的char*
因此,list+2
指向r
。该指针存储在ptr
中,也存储在char*
中
char*
是指向char的指针。因此,char**
是指向char的指针,这正是&ptr
的含义。数组不是指针。这是一个数组。但是,在某些上下文中,数组可以衰减到指针,其中最值得注意的是将数组传递给函数。指针也是数组的第一个元素,因此,数组的第一个元素的地址和数组的指针将是相同的。如果ptr
是char*
,那么它的地址是(char*)*
,即char**
。不,OP是正确的:char**p=&ptr
将p
初始化为指向数组的指针,而不是指向数组的元素。如果要明确区分“指针”和“数组”,请确定。但在这两种情况下,p
都不是指向数组元素的指针。这是一个指向元素的指针。@Timpiers我正在画一个明确的区分,这就是全部要点。你的新编辑就是我想在前面展示的内容。:)@哈里斯:谢谢。我把p
和ptr
搞混了。
int a[8];
int (*arr)[8] = &a;