指针阵列和指针数组的指针之间的区别
Difference between pointer to pointer array and pointer array
在第一种情况下, int **p
和 int *p2[5]
之间有什么不同但是P2也指向一系列指针! int *p2[5]
与int p2[5];
相同。因为在这两种情况下,P2都是指针!有什么区别?
int **p
这是指向int
指针的指针。因此,p
可以指向一个指针或一系列指针。反过来,*p
可以指向一个int
或int
的数组。p
的恰好在其类型中没有表达。
int *p2[5]
这是指向int
指针的长度为5的数组。在这里,p2
是长度5的数组。毫无疑问。但是p2[i]
呢?它们可能是单个int
的指针,也可能是阵列的指针。同样,该信息不存在于类型中。
在您陈述的问题中:
p2
是一个指针。
该语句不正确。p2
是一个数组,而不是指针。在某些情况下, p2
可能 em> decay 到指针,但它本身不是指针。
请注意,如果您从变量p2
开始,则可以将其分配给p
:
p = p2;
这是一个数组,p2
,腐烂到指针。此时,您知道p
指向int
的指针数组。
但是,如果您只有int**
类型的p
,那么您不知道p
点到数组。可能不是。换句话说,指针的类型无法完全描述它指向的指向。
您似乎对阵列和指针之间的区别感到非常困惑。他们不一样。阵列不是指针。阵列可以腐烂到指针。指针可以指向数组。
也许关键区别在于一个数组总是指相同的变量。另一方面,可以将指针指向不同的变量。另一个明显的区别是数组变量定义了存储。另一方面,定义指针变量没有。您必须始终将指针分配给其他对象的地址。
好的 - 我知道你在问什么。
当您拥有int arr[5]
时,您可以将其施放为int*
,它将指向数组中的第一个元素。例如;
int arr[5];
printf("%p == %pn", &(arr[0]), (int*)arr);
将打印两个相等的值。
同样,
int *p2[5];
int **p=(int**)p2;
printf("%p == %pn", &(p2[0]), p);
还将打印2个相等值。因此,p2
和p
指向。
但是,当您声明int* p2[5]
时,您将为int
分配5个指针的空间,而p2
将其施放到指针时,将指向此数组的开始。
另一方面,int**p
的声明没有这样的房间。它只是指向int
指针的指针。它可能指向int
s的数组,或者可能是int
的指针。它甚至可能是int
s的2-D阵列。
int **p
和int *p2[5]
之间有什么不同?
考虑这一点的方法是:int **p
表示表达式**p
是int
类型的变量。也就是说,您可以说**p = 123
。同样,int *p2[5];
表示表达式*p2[i]
是类型int
的变量;您可以说*p2[i] = 123;
。
现在您知道了,可以推断出p
的含义。如果**p
是int
类型的变量,则*p
必须是类型pointer to int
的变量,因此p
必须是类型pointer to pointer to int
的变量。
*p2[i]
呢?现在我们必须知道优先级。下标高于间接标记,因此这是*(p2[i])
,并且是int
类型的变量。因此,p2[i]
必须是pointer to int
类型的变量,因此p2
必须是类型array of pointer to int
的变量。
有意义?
在第一种情况下,P是指向数组的指针
no int ** p是指向指针的指针,它可以成为记忆块的指针,其中包含指针到包含整数的内存块。
int *p2 [5],是的,这是五个指针的数组。
- 在 const 函数中通过引用和指针返回之间的区别
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 在 Rust 中,指针和引用有什么区别?
- 在以下声明中使用指针有什么区别?
- C++指针中的这两种类型的值分配有什么区别?
- 按值和引用传递指针之间的区别?
- printf() 和 std::cout 在指针方面的区别
- *++*++ppp,*++pp[1],*++(*(1+ppp)有什么具体的区别吗?(C/C++指针问题)
- 'new'和'='与指针的区别
- 使用指针向量和非指针向量有什么区别
- 函数指针和传递指针之间的区别
- C 中的通用指针和 C++ 中的通用指针有什么区别?
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- Fortran 中的指针和C++有什么区别
- 带"new"的指针和带"&variable"的指针有什么区别
- 指针声明和间接寻址之间的区别
- 在矢量的尖括号内使用指针符号与在外部使用指针符号有什么区别
- 在C++中,a+i 和 &a[i] 在指针算术方面有什么区别?
- ->运算符和指针 * 之间的区别 (C++)
- 当返回一系列字符或指针到char文字时的区别