示例代码:

int a[] = {1,2,3,4,5,};
int *p = a;
int *q = &a[5];
printf("%d", q-p);

当sizeof(int)为4时,以下说法正确的是:

A. 因为第三行的错误不能编译

B. 因为第三行的错误运行时崩溃

C. 输出5

D. 输出20

解释:

代码中,p 指向数组 a 的首地址,q 指向数组 a 的最后一个元素的地址。由于指针之间进行减法运算时,计算的是两个指针指向的内存地址之间的差值,除以 sizeof(int) 后得到两个指针之间的元素个数。因此,q - p 的值为 5,即数组中元素的个数。

注意:

  • 指针运算的本质是内存地址的运算,其结果受数据类型大小的影响。
  • 指针运算必须保证两个指针指向同一数组,否则会导致不可预知的结果。
  • 以上代码示例中,q 指向 a[5] 的地址,而不是 a[6] 的地址,因为数组 a 的长度为 5。
C语言指针运算:数组首地址与元素地址的差值

原文地址: https://www.cveoy.top/t/topic/o36d 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录