有什么区别a
, &a
和第一个元素的地址a[0]
?相似地p
是一个指向用数组地址分配的整数的指针。
会pointer[]
进行指针算术并根据数据类型获取值?进一步的价值是什么*
预计?它应该是一个指针吗?
#include<stdio.h>
int main()
{
int a[] = {5,6,7,8};
int *p = a;
printf("\nThis is the address of a %u, value of &a %u, address of first element %u, value pointed by a %u", a, &a, &a[0], *a);
printf("\nThis is the address at p %u, value at p %u and the value pointed by p %d", &p, p, *p);
printf("\n");
}
This is the address of a 3219815716, value of &a 3219815716, address of first element 3219815716, value pointed by a 5
This is the address at p 3219815712, value at p 3219815716 and the value pointed by p 5
int a[]={5,6,7,8};
int *p= a;
请注意,在数组的情况下(在大多数情况下),请说数组a
, the ADDRESS_OF
a
与ADDRESS_OF
数组的第一个元素,即ADDRESS_OF(a)
与ADDRESS_OF(a[0])
. &
is the ADDRESS_OF
运算符,因此在数组的情况下a
, &a
and &a[0]
都是一样的。
我已经强调过,在大多数情况下,数组的名称会被转换为其第一个元素的地址;一个值得注意的例外是当它是 sizeof 的操作数时,如果与 malloc 相关的东西要工作,这一点是必不可少的。另一种情况是数组名称是 & 地址运算符的操作数。这里,它被转换成整个数组的地址。有什么不同?即使您认为地址在某种程度上是“相同的”,但关键的区别在于它们具有不同的类型。对于 T 类型的 n 个元素的数组,则第一个元素的地址具有“指向 T 的指针”类型;整个数组的地址具有类型“指向 T 类型的 n 个元素的数组的指针”;显然非常不同。
这是一个例子:
int ar[10];
int *ip;
int (*ar10i)[10]; /* pointer to array of 10 ints */
ip = ar; /* address of first element */
ip = &ar[0]; /* address of first element */
ar10i = &ar; /* address of whole array */
更多信息您可以参考C 书。 http://publications.gbdirect.co.uk/c_book/chapter5/arrays_and_address_of.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)