c++中使用new动态分配存储空间
来源:互联网 发布:金融和互联网行业知乎 编辑:程序博客网 时间:2024/04/30 06:10
下面这个例子,检验new给double型数组分配的存储空间的首地址是多少。s是指向这个数组的指针,s+1即是指针移动一位,指向下一个元素。
[root@sparkmaster test]# cat NewArray.cpp
#include <iostream>int main(){ double * s; int i; s = new double[10]; //分配一片存储空间给s,s指向这片空间的首地址。这片空间将要存的是10个double型数值 std::cout<<"Before giving value,s is "<<s<<",";//打印首地址 std::cout<<"*s is "<<*s<<"\n";//还未给数组赋初值,查看s指针指向的空间的值是多少 if( !s ) { std::cout<<"Allocation failure!\n"; return 0; }//给数组赋初值 for(i = 0; i < 10; i++) s[i] = 100.00 + i; std::cout<<"After giving value:\n";//把10个数组元素的地址以及元素值打印出来 for(i = 0; i < 10; i++) { std::cout<<"&s["<<i<<"]="<<&s[i]<<"\n"; std::cout<<"s["<<i<<"]="<<s[i]<<"\n"; }//s还是指向数组的首地址 std::cout<<"s is "<<s<<"\n";//s指针每加1,即指向数组的下一个元素 for(i = 1; i < 10; i++) { s = s + i; std::cout<<"s+"<<i<<" is:"<<s<<"\n"; s = s - i; } delete s; return 1;}
执行结果如下:
[root@sparkmaster test]# g++ -o newarray NewArray.cpp
[root@sparkmaster test]# ./newarray
Before giving value,s is 0x17aa010,*s is 0
After giving value:
&s[0]=0x17aa010
s[0]=100
&s[1]=0x17aa018
s[1]=101
&s[2]=0x17aa020
s[2]=102
&s[3]=0x17aa028
s[3]=103
&s[4]=0x17aa030
s[4]=104
&s[5]=0x17aa038
s[5]=105
&s[6]=0x17aa040
s[6]=106
&s[7]=0x17aa048
s[7]=107
&s[8]=0x17aa050
s[8]=108
&s[9]=0x17aa058
s[9]=109
s is 0x17aa010
s+1 is:0x17aa018
s+2 is:0x17aa020
s+3 is:0x17aa028
s+4 is:0x17aa030
s+5 is:0x17aa038
s+6 is:0x17aa040
s+7 is:0x17aa048
s+8 is:0x17aa050
s+9 is:0x17aa058
可见,数组的元素地址跟指针是一一对应的,s[0]的地址即是s指针的内存,s[1]的地址即是s+1指针的内容。那为什么s+1,地址却不是加1,实际是8(0x17aa020-0x17aa018=0x8)?哦对了,因为double类型的单位长度是8 byte!
另外,此例也验证了,如果s是指向数组的指针,s[i]即是数组中第i个元素的值,而不是*s[i],实际上*s[i]是个非法表示。若要表示s[i]元素的地址,应该是&s[i].
0 0
- c++中使用new动态分配存储空间
- Linux C 存储空间动态分配
- 存储空间动态分配
- c++中使用new和delete动态分配内存
- C中动态分配内存
- [转载]存储空间动态分配
- 动态分配 撤销存储空间
- C++中使用new动态生成一个数组空间以及使用delete对存储空间进行释放
- 用new和delete运算符进行动态分配和撤销存储空间
- C/C++中如何动态分配内存(new/delete malloc/free 区别联系)
- c程序中存储空间布局
- C中关于动态分配内存
- C语言中动态分配内存
- c语言中动态分配数组
- C语言中动态分配内存
- C语言中动态分配数组
- C语言中动态分配数组
- C语言中动态分配数组
- Hive UDF教程(一)
- 算法-蓝桥杯习题(4-1)
- 《Natural Language Processing》斯坦福视频学习笔记——3.编辑距离
- spring-如何给静态变量注入值
- 项目记录17--DoTween回顾记录基础使用
- c++中使用new动态分配存储空间
- HDOJ 1003 动态规划
- Mupad学习记录2
- CWnd::OnSize
- csdn 这是啥意思??????????????
- 需要排序的最短子数组长度
- Javascript使用post方法提交数据
- 【iOS开发问题】App Transport Security has blocked a cleartext HTTP (http://) resource load
- 一次死锁追踪经历