未使用和未被分配内存地址中的垃圾数据: 我是这样理解的=》未使用是你申请了一个变量 却没有初始化,那么这个变量的值是个随机数,那么对于我们来说就是垃圾数据。未被分配的内存地址是值你没有标记的内存(没有申请的内存),你申请了一个变量int i,那么后面的内存就是未分配的内存。但是可以用 &i+1来表示 查看这块内存的值*(&i+1)也会是个随机数。
地址p=0018FF44 //printf("地址p=%p \n",p); 打印P的地址 0018FF44
右值*p=00000001 //printf("右值*p=%p \n",*p); 打印P的值 1
地址P-1=0018FF40 //printf("地址p-1=%p \n",p-1); 打印P-1的地址 0018FF40 右值(P-1)= cccccccc //printf("右值*(p-1)=%p \n",*(p-1)); 打印*(P-1)的值 cccccccc
*(p++)=00000001 //printf("*(p++)=%p \n",*(p++)); 打印*(P++)的值 实际是两步:打印P的值 , P=P+1
地址p=0018FF48 //printf("地址p=%p \n",p); 打印P的地址 P = 0018FF44 + sizeof( int ) = 0018FF48
右值*p=0018FF88 //printf("右值*p=%p \n",*p); 打印P的值 0018FF48 = 1638280
++*p=0018FF89 //printf("++*p=%p\n",++*p); 打印++(*P) 的值 P = 1638281
地址p=0018FF48 //printf("地址p=%p \n",p); 打印P的地址 0018FF48
右值*p=0018FF89 //printf("右值*p=%p \n",*p); 打印P的值 1638281
*(p++)=0018FF89 //printf("*(p++)=%p \n",*(p++)); 打印*(P++)的值 实际是两步:打印P的值 , P=P+1 地址p=0018FF4C //printf("地址p=%p \n",p); 打印P的地址 右值*p=00401449 //printf("右值*p=%p \n",*p); 打印*P的值 00401449
我在电脑上测试的结果
红色的部分是我加的代码查 i 前面内存地址的值。后面的是查看后面地址的值。
i 前面的地址是 地址P-1=0018FF40 右值(P-1)= cccccccc p-1没有使用也没有分配 其中的值是cccccccc随机数。 后面的红色代码是查看 i 以后的内存的地址 地址p=0018FF4C 右值*p=00401449
小建议:你打印内存地址中的值可不可以用printf("右值*p=%d \n",*p); p是16进制的值,一般用来表示地址的。
不知道有没有正确理解你的意思。
|