> 文章列表 > 从C出发 27 --- 深入理解指针与地址

从C出发 27 --- 深入理解指针与地址

从C出发 27 --- 深入理解指针与地址

指针是什么? 

指针是变量,这种变量有一点特殊,它特殊在保存的值是内存地址,并且我们还可以通过指针所保存的内存地址来直接访问相应内存中的数据。

每一种指针类型的变量只保存对应类型变量的地址   比如这个类型的指针变量,只保存对应的 int 类型的普通变量的地址

有效指的就是 合法的,可用的

什么时候可以打破指针规则,   当你成为一个熟练的指针玩家的时候就可以打破了

 printf("*pi = %d, *pf = %f\\n", *pi, *pf);   //通过指针访问对应的内存地址中的数据

 

打印出来的结果不一样,为什么会这样 ?

int* pi = &f; 

因为 pi 指向了一个类型不兼容的变量,那么后面会发生什么,我们不知道

 

 程序崩溃了

第18 行的打印语句根本没有被执行到,所以说屏幕上没有打印出对应的内容


确实因为函数本身的缺陷,我们没有办法编写函数直接交换2 个变量的值,不能直接能不能间接呐?

 

  *p = 100;     想要通过指针 p 去改变 4个字节的内存数据,而这4个字节的内存数据就是一个int 类型变量的值

 


 

具体交换什么值的代码呐?

t = *pa;
*pa = *pb;
*pb = t;   这3行语句可以等价于整型变量,所等价的整型变量在哪里定义的呐?在函数的外部定义的,因为这 两个指针(int* pa, int* pb),肯定会指向外部定义的两个整型变量了,所以这3 行代码用于交换函数外定义的两个整型变量的值


在 C 语言中 return 只能返回一个值,如果就是想要从函数中返回多个值  ,只有一条路,就是要利用指针

 

 

这就是利用指针从函数中返回多个值的典型案例

 结果意味着 从函数中返回了2个值,返回的这2个值放到了ar 变量和 mr 变量当中