您的位置:首页 > 编程语言 > C语言/C++

C++学习(二)——指针与动态内存分配

2016-04-24 20:30 971 查看

指针与动态内存分配

变量的地址

变量a占用的是内存的2000~2003四个单元,变量a的地址为2000。源代码中写a=5;我们可以理解为将5赋给变量a;而计算机在执行程序时,只是将5送入2000~2003四个存储单元中。



2. 程序内存结构

- 代码段:程序代码,由exe文件中相应内容载入内存后形成,只读

- 静态数据区:全局变量、静态数据成员和静态局部变量。全局变量在程序启动后占用存储空间;静态局部变量在第一次执行时创建

- 栈区:局部变量、函数参数与返回值,由操作系统自动维护

- 堆区:由程序员动态请求的数据区,运行时确定,由程序员负责申请和释 放

3. 动态内存分配

使用new请求内存时,可能由于内存不足会造成失败,应该随时进行检测。

int *p;

if((p=new int) == NULL)

{

cout<<“error”<<endl;

exit(0);

}

*p=5;

……

delete p;
4. 指向常量指针、常指针、指向常量的常指针

指向常量指针

const char *pc=“abcd”;
或char const *pc=“abcd”;
//pc所指向的字符串不能被修改。


常指针

char * const pc=“abcd”;//pc不能指向别的字符串,但可改变指针所指向的内容
pc[2]=‘a’;


指向常量的常指针

const char * const pc=“abcd”;//pc不能指向别的字符串,也不能改变指针所指向的内容。


函数及参数传递

值传递

函数的参数是局部变量

int sum(int a,int b)
{
return a+b;
}
int main()
{
int x(5),y(4);
cout<<sum(x,y)<<endl;
return 0;
}


指针传递

void xhg(int *a,int *b)
{
int *tmp;
tmp=b; b=a; a=tmp;
}
int main()
{
int x(5),y(4);
xhg(&x,&y);
cout<<x<<‘  ‘<<y<<endl;
return 0;
}


引用传递

void sum(int &a, int b)
{
a+=b;
}
int main()
{
int x(5),y(4);
sum(x,y);
cout<<x<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: