C语言双重指针

这是我的一些二重指针的一些经验,希望对大家有帮助,如有啥错误或者更好的想法希望能指出,共同进步,谢谢

#include<stdio.h>
void change(int *p)		//函数参数为整形指针,p = v,即 p和v都指向变量num
{
	*p = 2;				//修改*p的值也修改了num的值
	printf("p = %d\n",*p);
}

int main()
{	
	int num = 1;	//声明一个整形变量num
	int* v = &num;		//令指针v指向num变量
	printf("num1 = %d\n",num);	//输出num的值
	change(v);					//调用函数
	printf("num2 = %d\n",num);	//输出函数调用的num变量
	return 0;
}

编译结果是num1 = 1,p = 2,num2 = 2
通过以上代码可以看出,通过调用函数实现改变了num的值,是通过在函数里面创建一个新的指针指向num,从而修改num的值并没有改变指针v的指向,v还是指向num。

#include<stdio.h>
void change(char *p)
{
	p = "bbb";		//令字符型指针p指向字符串"bbb"
	printf("p = %s\n",p);
}

int main()
{	
	char *v = "aaa";	//创建字符型指针,指向"aaa"这个字符串
	printf("v1 = %s\n",v);//使用v而不是用*v的原因是,v没有对变量进行引用,而是字符串的首元素的地址 
	change(v);
	printf("v2 = %s\n",v);
	return 0;
}

编译结果:v1 = aaa,p = bbb,v2 = aaa
编译结果与预期不符,以为v2会是"bbb",却与意向的结果不一致。原因是在change函数里把指针v赋值给指针p,然后指针p又指向了"bbb",所以指针v还是指向"aaa"

把上述代码做一个小小的修改如下

#include<stdio.h>
void change(char **p)		
{
	*p = "bbb";
	printf("p = %s\n",*p);
}

int main()
{	
	char *v = "aaa";
	printf("v1 = %s\n",v);
	change(&v);		//传入指针v的地址
	printf("v2 = %s\n",v);
	return 0;
}

编译结果:v1 = aaa,p = bbb,v2 = bbb
在change函数中,声明了一个双重指针p,p是指向指针的指针,他存放着指针的地址,在本例中,p也就存放着指针v的地址,p也就是指针v,即p = v。函数change中*p = “bbb"也就等于v = “bbb”。
指针v指向了字符串"bbb”,不再指向字符串"aaa",真正实现改变了指针的值

由此总结,当想用函数改变指针的指向时,函数参数应该是双重指针。当想用函数改变指针指向的元素的内容时,函数参数是指针就可了

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值