在Windows 8上将DevCpp与TDM GCC 4.9.2结合使用,但是我认为平台对这个问题并不重要。
我知道我们可以使用一个指针来指向单个数据或数据数组。 我了解了数组的指针,但从未使用过。一个相对于另一个有什么优势?
示例代码...
#include <stdio.h>
int main()
{
int x[2]={10,20};
int *p1= NULL; //simple pointer
int (*p2)[] = NULL; //pointer to an array, specifically
p1 = x;
p2 = &x; //removing the & gives me a warning of "assignment from incompatible pointer types".
printf("x[1] = %d\n", x[1]);
*(p1+1) = 7;
printf("x[1] = %d\n", x[1]);
(*p2)[1] = 55;
printf("x[1] = %d", x[1]);
return 0;
}
p1或p2相对于另一个有优势吗?
答案 0 :(得分:3)
它们是完全不同的。
int *p;
-是指向int的指针
int (*p)[1];
是指向数组的指针(在这种情况下,仅一个元素)
在您的简单示例中,指针算法将相同,并且生成的代码将相同。但是它们仍然具有不同的类型,编译时您可能会收到警告。
当示例变得不那么琐碎时,您将看到的“优点”:
int (*p)[100];
p++;
指针将指向接下来的100个int数组。
答案 1 :(得分:2)
指向数组的指针表示接受数组地址的指针。 假设数组是int arr [5],其中int的大小为4个字节。 p是指向接受int数组地址的数组的指针。
int arr[5];
int (*p)[5];
p=&arr;//address of an array block
假设基地址是1000,那么在p递增后,由于数组块的大小为20个字节,它将导致我们到达1020地址。
p指向1000个地址
p++;
//Now p points to 1020 not 1004.
对于int * q,q照常指向1004。