开发平台(Platform): (Ex: Win10, Linux, ...)
windows 8
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
n/a
问题(Question):
最近在初学指标有一点小疑问,所以想做个实验
我先设定了一个 int 的阵列
我知道 int 的默认空间是 4 bytes
阵列的开头内存位址是 arr == 0028FEF8
所以每一个阵列的每一个元素就是
0028EFE8 开始递增 4
所以是
0028FEF8
0028FEFC
0028FF00
0028FF04
0028FF08
我去取值的写法是用 loop
i++ 递增
arr + i
arr + 0 == arr[0] == 0028EFE8
arr + 1 == arr[1] == 0028EFEC
.
.
arr + 4 == arr[4] == 0028FF08
我想问的问题是
为什么 arr + 1 不是 0028EFE8 + 1 == 0028EFE9 ??
不管我用 arr+1,或者 ptr + 1
他都会自动跳 4 bytes,自己去找到每个阵列元素的内存位址开头
为什么,我用 ptr + 1 不会取到 arr[0] 跟 arr[1] 之间的 0028EFE9 的这个位址 ??
请问有办法可以取到
arr[0] 0028EFE8
arr[1] 0028EFEC
之间的三个内存位址
0028EFE9
0028EFEA
0028EFEB
这三个位址吗??
喂入的资料(Input):
预期的正确结果(Expected Output):
输出结果没问题
只是想做个实验,更加理解指标跟内存位址
address of arr[0] = 0028FEF8
address of arr[1] = 0028FEFC
address of arr[2] = 0028FF00
address of arr[3] = 0028FF04
address of arr[4] = 0028FF08
错误结果(Wrong Output):
n/a
程式码(Code):(请善用置底文网页, 记得排版)
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[] = {10,20,30,40,50};
int i=0;
int *ptr = &arr[0];
for( i ; i < 5 ; i++ ){
printf( "address of arr[%d] = %p\n" , i , arr+i );
printf( "address of arr[%d] = %p\n" , i , ptr );
ptr += 1;
}
}
补充说明(Supplement):
初学
在请各位前辈解惑了
谢谢