C语言笔记(数组地址一些细节)

 一、数组的a+1和&a+1的区别

先看看测试代码:

1 int data[10]={};
2 printf(" sizeof(data) = %d.
", sizeof(data));
3 
4 printf(" data         = %p.
", data);
5 printf(" &data        = %p.
", &data);
6 printf(" (data+1)     = %p.
", (data+1));
7 printf(" ((&data)+1)  = %p.
", ((&data)+1)); // data+1*sizeof(data)

运行结果:

分析:

  (1)可以看出a的值等价于&a。

  (2)a+1表示指向数组中下一个数据地址处;&a+1表示加上整个数组的大小,已经超出了数组的范围。

  (3)&a+1这种用法是有一定危险的,建议一般情况下不要使用。

  (4)实际中有可能不会使用,但是在这里分析是为了加深对数组的内存分布的理解。

原文地址:https://www.cnblogs.com/zou107/p/4958902.html