2021-08-07

本文详细探讨了C语言中的二重指针(int** p),它与普通指针的区别,以及在编程中如何确保类型匹配。强调了类型检查在避免错误中的关键作用,同时也指出了一重指针也能完成大部分二重指针任务,但使用二重指针是为了增强编译时的静态类型安全。
摘要由CSDN通过智能技术生成

4.4.6二重指针(int **p;)

4.4.6.1、二重指针(int **p)与普通指针的区别(int *p)

1、本质上而言,二重指针和一重指针的本质都是指针变量。而我们清楚,指针变量的本质其实也是变量(在内存中占一个格子,变量名与内存地址绑定);
2、既然二重指针也是指针,那么二重指针的作用也是用来指向其他的变量,特别注意一重指针变量和二重指针变量本身都占有4个字节(因为32位系统中,内存地址都是32位的,而指针变量的目的是用来存地址的,故指针变量这个内存空间大小就是固定的4个字节)

4.2.6.2、二重指针的本质

1、二重指针本质上也是指针变量,和普通指针的差别就是—>普通指针指向的就是普通变量,而二重指针指向的变量类型必须是一重指针(普通指针)。二重指针其实也是一种数据类型(比如char **),编译器在编译时会根据二重指针的数据类型做静态类型检查,一旦发现运算时数据类型不匹配编译器就会报错。
比如 :
char   **p;这里p就是一个二重指针,但是这个指针指向的变量的数据类型是char *
char *p;  这里p就是一个一重指针,但是这个p指向的变量的数据类型就是char

提醒在分析指针的指向时一定要特别注意数据类型的匹配,如下代码
int main()
{
int a;
char * p; //这里特别注意p的数据类型是char *
p=&a; //这里特别注意a是一个Int类型的变量,那么&a就是int 类型的。
//所以这里p=&a就会出现类型不匹配而出错, 这里相当于char
=int
,造成类型不匹配,所以一定会出错
}
*
针对于此,只是想提醒自己,一定要特别注意C语言中类型匹配的问题,,这个特别关键
2、C语言中如果没有二重指针行不行?其实是可以的,一重指针完全可以做二重指针的事情,之所以要二重指针(函数指针、数组指针),就是为了让编译器了解这个指针指针被时定义他的程序员希望这个指针被用来指向什么东西(定义指针时,用数据类型来标记,比如int *p,就表示p要指向int 型数据),编译器知道指针类型后可以帮我们做静态类型检查。编译器的这种静态类型检查可以辅助程序员发现一些隐含性的编程错误,这是C语言提供的一种编译时的查错机制。
3、为什么C语言要发明二重指针呢?原因是和发明函数指针、数组指针、结构体指针等情况一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值