二级字符指针

二级字符指针

一级字符指针

一级字符指针指向一个字符,一级字符指针的一般有两种使用场合:指向一个字符和指向一个字符串。

二级指针指针

二级字符指针指向的是一个一级字符指针,如:

void main3() {
	char **p2=NULL;
	char *p1 = "hello";
	p2 = &p1;
	printf("%p,%p\n", *p2, p1);
	puts(*p2);
	puts(p1);
	getchar();
}

下面的草图简要说明了上述代码的指针指向
二级指针指向示意图

二级指针的使用场景

在函数中交换两个字符指针的值
void fun(char **p1, char **p2) {
	char *ptemp = NULL;
	printf("*p1:%p,*p2:%p,ptemp:%p\n", *p1, *p2, ptemp);
	ptemp = *p1;
	printf("*p1:%p,*p2:%p,ptemp:%p\n", *p1, *p2, ptemp);
	*p1 = *p2;
	*p2 = ptemp;
	printf("*p1:%p,*p2:%p,ptemp:%p\n", *p1, *p2, ptemp);
}
void main() {
	char *p_1 = "Hello";
	char *p_2 = "World";
	puts(p_1);
	puts(p_2);
	fun(&p_1, &p_2);
	puts(p_1);
	puts(p_2);
	getchar();
}

下面的草图简要说明了上述代码的指针指向
在这里插入图片描述

stdlib 中 strtol 函数

long strtod( const char *start, char **end);
以下代码展示了strol的使用

	char *p1="-123154abcd";  //支持e计数法"1.2e10"
	char *p2;
	double d=strtod(p1,&p2); //&p2:获得p2的地址,向里面存放一个地址
	printf("%f\n",d); 
	puts(p2)

一个错误使用二级指针的例子

下面这个函数是“在函数中交换两个字符指针的值”的不正确写法:达不到交换的目标,去分析为什么会这样能加深对二级字符指针的理解

void fun(char **p1, char **p2) {
	char **temp = NULL;
	ptemp = p1;
	*p1 = *p2;
	*p2 = ptemp;
}

笔者绘制了一个草图,但并不清晰,读者可以自行绘制分析。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值