【【Allen5G】C语言学习第20篇---指针的本质剖析】https://toutiao.com/group/6696238353186030087/?app=explore_article×tamp=1566537702&req_id=201908231321420100180260463127622&group_id=6696238353186030087&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share
*号的意义
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示取指针所指向的内存空间中的值
我将其理解为“钥匙”,如图
实例1:指针使用
#include <stdio.h> int main(){ int i = 0; int* pI; char* pC; float* pF; pI = &i; *pI = 10; printf('%p, %p, %d\n', pI, &i, i); printf('%d, %d, %p\n', sizeof(int*), sizeof(pI), &pI); printf('%d, %d, %p\n', sizeof(char*), sizeof(pC), &pC); printf('%d, %d, %p\n', sizeof(float*), sizeof(pF), &pF); return 0;}
传值调用和传址调用
- 指针是变量,因此可以声明指针参数
- 当一个函数体内部需要改变实参的值,则需要使用指针参数(很多新手容易在这里犯错误)
- 函数调用时实参值将复制到形参
- 指针适用于复杂数据结构作为参数的函数中
实例2:利用指针交换变量
#include <stdio.h> int swap(int* a, int* b){ int c = *a; *a = *b; *b = c;} int main(){ int aa = 1; int bb = 2; printf('aa = %d, bb = %d\n', aa, bb); swap(&aa, &bb); printf('aa = %d, bb = %d\n', aa, bb); return 0;}
常量与指针 (这个意思是说怎么分辨是指针还是常量)
方法是:左数右指
当const出现在*号左边时指针指向的数据为常量
当const出现在*后右边时指针本身为常量
实例3:常量与指针分析
#include <stdio.h> int main(){ int i = 0; const int* p1 = &i; int const* p2 = &i; int* const p3 = &i; const int* const p4 = &i; *p1 = 1; // compile error p1 = NULL; // ok *p2 = 2; // compile error p2 = NULL; // ok *p3 = 3; // ok p3 = NULL; // compile error *p4 = 4; // compile error p4 = NULL; // compile error return 0;}
小结:
- 指针是C语言中一种特别的变量
- 指针所保存的值是内存的地址
- 可以通过指针修改内存中的任意地址的内容
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。