C++中的指针


以下为本人大一时阅读《C++ Primer Plus》关于指针的章节所做的笔记
 

指针

一个函数只能返回一个值,但是如果使用指针来传递变量,则可以修改更多的值,可以达到返回不止一个值的效果

用指针作为参数的写法:

void f ( int * nptr){
     *nptr = *nptr * *nptr; //计算平方
}

传递参数时候:

int a;
f ( &a );

sizeof函数的使用:

size_t getsize(int *n){
	return sizeof(n);
}
int main()
{
	int a[20];
	cout<<sizeof(int)<<endl;
	cout<<sizeof a<<endl;
	cout<<sizeof(a)<<endl;
	cout<<getsize(a)<<endl;
	return 0;
}

输出:

4
80
80
8

​注意:
getsize函数返回的是指针变量所占的大小
对于一个数组a[10],sizeof(a)与sizeof a返回的值相同
但对于普通变量,如int a,使用sizeof函数需写成:

sizeof a;

对于变量类型,写成:

sizeof (int);

指针运算:
指针的运算一般无意义,不过可以用来处理数组
如:

int a[20];
int *p=&a[0];
p+=2;

在这个过程中,p存储的地址的值加上2*4=8
又如:

int a[20];
int *p1=&a[0];
int *p2=&a[2];

则p1-p2=2

 
指针与数组:

int b[10];
int *bptr=b;

则有b[0]=(b)、b[2]=(b+2)
二维数组:
对于a[3][5]
*(*a+1)=a[0][1]
*(*(a+1)+1)=a[1][1]

 

new和delete

Free store:
有时候也称为heap
分配给每个程序用于存储在执行时创建的对象的内存区域

new操作:
申请内存(allocates (i.e., reserves) storage of the proper size for an object at execution time)
调用构造函数来初始化对象(calls a constructor to initialize the object)
返回指定到new右边的类型的指针(returns a pointer of the type specified to the right of new )

delete操作:
删除对象(destroys a dynamically allocated object)
调用对象的析构函数(calls the destructor for the object)
释放内存(deallocate memory from the free store)

用法演示:

int *p1=new int;
char *p2=new char;
int *p3=new int[4];//数组
delete p1;
delete p2;
delete []p3; //删除数组

初始化由new分配的对象

double *ptr = new double( 3.14159 );
cout<<*ptr;

注意:
int *p=new int[10];
申请了一个含有与10个元素的int型数组
这时是同时申请了10个int的内存空间
可以使用p[i]来表示这个数组中的某个元素
delete []p;
是同时将这个数组的所有元素删除

delete p;
只有将这个数组的第一个元素删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值