二级指针与数组

char *str[] = {"abc", "mike",  "hello"};
这是字符指针数组,每一个数组元素是一个指针变量,而每个指针变量指向字符串首字符地址,即是字符串的地址。因为每一个字符串都代表的是一个地址,是字符串首字符的地址。字符串常量是放在文字常量区,是不可以更改的。而指针数组str里面存放的是指向字符串地址,它是可变的。如str[0] 是可变的,它是指针变量,但是*str[0]是不可变的,它在试图改变字符串常量"abc"的首字符中的a。

二级指针与字符指针数组是不同的,类似char **p = {"abc", "mike",  "hello"};是错误的。p只是一个二级指针变量,也仅仅是一个指针变量,只能放一个地址。

char *str[] = {"abc", "mike",  "hello"};
char **p = str;
这样的写法是正确,str代表的是这个指针数组的首元素地址,是一个指针。str = &str[0],而str[0]本身又是指向字符串"abc"的指针,所以指针的指针当然用二级指针来存放。

二级指针常用的用法是在函数传参过程中。void fun(char *str[])这样的函数,函数中的的形参编译器会当作指针处理,不是数组,所以可以写成void fun(char **str)

void fun(char **p);
void fun(char *p[100])
void fun(char *p[])
这三个是等价的,编译器都是当作char **p处理的

二级指针
二级指针存放的是指针变量的地址。
例如:
char s=‘s’;
char* ps=&s;
char** pps=&ps;
pps就是一个二级指针,它里面存放的是一级指针的地址,对它解引用可以得到一级指针的内容,也就是得到s的地址,再对一级指针解引用可以得到s中的内容。


原文链接:https://blog.csdn.net/ytx2014214081/article/details/79275405  作者:迷茫的叶

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值