C++指针常见错误

1、使用为初始化的指针

int main(void){	
	//使用未初始化的指针
	int *p;
	printf("*p value: 0X%p\n",*p);
	
	return 0;
}

报错信息
2、将值当做地址赋值给指针

int main(void){	
	
	int *p;
	int val = 10;

	//将值赋给指针
	p = val;

	return 0;
}

值赋给指针-错误截图
3、忘记解引直接访问内存

int main(void){	
	int arr[10];
	int *p1,*p2;

	p1 = &arr[0];
	p2 = &arr[1];

	//判断数组两个元素的大小
	if(p1>p2){
		//内容永远不会被执行,因为比较的p1和p2的地址大小,p1永远小于p2
	}

	return 0;
}

4、再次使用忽略重新赋值

int main(void){	
	char arr[10];
	char *p;
	p = arr;

	do{
		gets(arr);	//控制台获取一组字符
		while(*p){
			printf("arr's value: %c\n",*p++);
		}
	}while(strcmp(arr,"done")!=0);

	return 0;
}

未重新赋值-小于原长度
未重新赋值-大于原长度

错误原因:指针p已经指向了数组中第七个元素字符串结束符“0\”,当下一次打印内容时,
如果输入内容长度小于原来的,指针p还是指向的结束符,从而无法打印内容
如果输入内容长度大于原来的,打印的内容也是显示不正确

解决方案:每次循环时给指针重新初始化

int main(void){	
	char arr[10];
	char *p;
//	p = arr;

	do{
		gets(arr);	//控制台获取一组字符
		p = arr;	//每次循环进行初始化操作
		while(*p){
			printf("arr's value: %c\n",*p++);
		}
	}while(strcmp(arr,"done")!=0);

	return 0;
}

正确截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值