C语言里几种容易混淆的指针

Python08

C语言里几种容易混淆的指针,第1张

1、指针数组

形如:int * p[10]//一个指针数组,数组里面有10个元素,每一个元素都是一个int型的指针

数组内的每一个元素都是一个指针变量(这时注意每个元素所占的内存单元大小是地址的长度而不是类型长度)

2、数组指针:形如:int (* b)[10]//一个数组指针,指针指向一个列长度为十的一个二维数组的第一行的行地址。

也称作行指针,该指针指向了一个长度为10的数组的行首地址;

如:b表示第一行的首地址;b+1表示第二行首地址

*(b) = b[0][0] *(b+1) = b[1][0]*(*(b+i)+j) = b[i][j]1

3、指向指针的指针:形如: int **c = p//二级指针c,指向了指针数组p的首地址&p[0],即指向了指针数组的第一个指针的地址

该指针大小也是取决于操作系统,它跟一级指针其实本质上是没有差别的,只是说是有连环指向的这种感觉。

c是指向指针的指针,因此它使用间接取址符时需要两次才能取出目标的内容。

比如:*c表示的是p[0]的地址,而**c表示的是p[0]地址中的内容

c == &p[0] // 指针数组中第一个指针元素的地址

*c == p[0] // 指针数组中第一个指针元素地址的内容,即目标变量的地址

**c == *p[0]// 指针数组中第一个指针元素指向的目标变量值

要这么复杂干什么?直接 if('0')

恒唯1. 知道为什么?

或者

void main(int _)

{

if(_)

{

printf("dsds")

}

}

是指输出和运算都不起作用,你想真的了解浮点类型的话劝你还是去看一下浮点类型在计算机内存中是怎么存储的

这个printf输出6为是因为printf自带的,printf对于float类型本身就输出6位小数,他是这个设计的,所以C语言的设计者还给了printf一个参数来制定宽度