这个代码运行为什么前10个内存地址和后十个不同

森霖C 2017-10-20 12:08:45
#include<iostream>
using namespace std;
int main(){
int* a=new int[10];
int b[10]={1,2,5,4,8,9,6,5,4,7};
for(int i=0;i<10;i++){
a[i]=b[i];
cout<<&a[i]<<endl;
}
for(int i=0;i<10;i++){
cout<<&b[i]<<endl;
}

}
...全文
532 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2017-10-20
  • 打赏
  • 举报
回复
cout<<&a[i]<<endl; 改成 cout<<a[i]<<endl;
ooolinux 2017-10-20
  • 打赏
  • 举报
回复
《深入理解C指针》
ooolinux 2017-10-20
  • 打赏
  • 举报
回复
楼主应该了解内存,比如系统有1M的内存(打个比方),就是1024x1024个字节,你可以想象成100万(多)个格子,每个格子都有编号(从0开始),编号就是地址。比如int i,i变量被分配在编号为第100~103个格子(分配的位置是由系统决定的),如果赋值i=10,那么这4个格子里面存储的就是 00000000 00000000 00000000 00001010(等于整数10,这里还有内存字节序的问题,可以先不管),i的地址,就是&i,等于100(编号)。如果有一个int* p,p是一个指针变量,p变量被分配在编号为第104~107个格子,如果赋值p=&i,那么这4个格子里面存储的就是 00000000 00000000 00000000 01100100 (等于整数100),也就是p==100,p变量本身的地址,也就是&p,等于104。 常量,比如const int i=100,是不为i分配空间的,程序编译的时候自动把使用i的地方用100代替。 const char *str="Hello,world", "Hello,world"字符串字面量位于进程内存空间中的文字常量区,比如分配在编号第200~211个格子(每个格子存一个字符,最后有一个'\0'是自动添加的),如果用printf("%p:%s",str,str)输出,结果就是200:Hello,world,200表示str变量指向的地址,str变量可能被分配在108~111个格子(这4个格子里面存的值就等于200),而str变量的地址&str==108。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧