(二)C++指针声明和使用

1. 指针声明和初始化

第一种:

int a = 5;
int *pt = &a;

在第一种中,不能用int*pt=a;因为a是一个常量值,此时没有给pt所指向的内存赋值


第二种:

int *pt = new int;
delete pt;

//给pt赋值
int *pt = new int;
*pt = 7;
delete pt;

在第二种中,new了之后必须用delete进行内存释放,但是只是释放pt所指向的内存,pt本身还存在


第三种:

//采用malloc的方式,需要用free释放
int * pt = (typename * )malloc(size);
free(pt);

2.指针的危险

2.1野指针

产生野指针的原因主要有以下三个:
1.指针变量没有被初始化

char* p;//这时候p为野指针

2.在指针被free或delete之后,没有置为NULL。
在指针被free和delete之后需要将其置为NULL,因为delete只是删除了指针指向内存中的内容,而指针还是存在的。

3.对于指针的操作超出了范围

char * a = new char[10];
int x = 5;
cout << *(a+x);

4.函数返回的是指针

char * a(){
	char p[] = "abc";
	return p;
}
int main(){
	a();
	return 0;
}

此时p的内容为"abc",存储在栈区域,生命周期为该函数调用时间,当函数结束时,内容被清除,p就变为了野指针
改写:

//方法一
char * p = "abc";
//方法二
char *p = new char[];
strcpy(p,"abc");

2.2资源泄露

char * a = new char[10];//分配了10个内存空间,并且指针指向该内存
a = "abcd";//此时p的指向由原来的内存空间变为了指向常量“abcd”,从而造成资源泄露
delete [] a;//报错

第二步可以采用strcpy替换,strcpy(a,“abcd”),将abcd存入内存空间

char * a = new char[10];
strcpy(a,"abcd");
delete [] a;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值