指针与动态内存分配
- 变量的地址
变量a占用的是内存的2000~2003四个单元,变量a的地址为2000。源代码中写a=5;我们可以理解为将5赋给变量a;而计算机在执行程序时,只是将5送入2000~2003四个存储单元中。
2. 程序内存结构
- 代码段:程序代码,由exe文件中相应内容载入内存后形成,只读
- 静态数据区:全局变量、静态数据成员和静态局部变量。全局变量在程序启动后占用存储空间;静态局部变量在第一次执行时创建
- 栈区:局部变量、函数参数与返回值,由操作系统自动维护
- 堆区:由程序员动态请求的数据区,运行时确定,由程序员负责申请和释 放
3. 动态内存分配
使用new请求内存时,可能由于内存不足会造成失败,应该随时进行检测。
4. 指向常量指针、常指针、指向常量的常指针
int *p;
if((p=new int) == NULL)
{
cout<<“error”<<endl;
exit(0);
}
*p=5;
……
delete p;
- 指向常量指针
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;
}