我已经在C99标准中读到了扩展数组的方法,但是我无法理解为什么这会起作用.如果我有
a[5]
Run Code Online (Sandbox Code Playgroud)
和a是一个整数,然后不会访问第二个元素而不是第五个(假设整数是四个字节)?不应该扩展到
*(a+5*sizeof(a))
Run Code Online (Sandbox Code Playgroud)
因为每个字节都有自己的地址?
指针算术基于指向类型的大小; 如果你有一个指向p类型的指针T,那么p+1为你提供该类型的下一个实例的地址.所以,给出如下内容:
char *pc = 0x1000;
int *ic = 0x1000;
double *dc = 0x1000;
Run Code Online (Sandbox Code Playgroud)
pc + 1给出下一个char对象的地址(将在其中0x1001),ic + 1给出下一个int对象的地址(将为0x10044个字节int),并dc + 1给出下一个double对象的地址(将为0x10088-字节double).
这就是为什么a[i]被定义为*(a + i)-您访问的是i"个元素的数组,而不是i"个字节数组.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |