二级字符指针
一级字符指针
一级字符指针指向一个字符,一级字符指针的一般有两种使用场合:指向一个字符和指向一个字符串。
二级指针指针
二级字符指针指向的是一个一级字符指针,如:
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;
}
笔者绘制了一个草图,但并不清晰,读者可以自行绘制分析。