带你认识指针——C语言的灵魂(一)
来源:互联网 发布:显卡更新驱动负优化 编辑:程序博客网 时间:2024/05/01 07:29
前言
最近复习考研的知识,有机会研究一下C语言的指针,今天就总结一下有时候让我们爱的要死,有时候也恨得要死的指针,到底是什么?书里指针那章的序言说到了,不掌握指针就是没有掌握C的精华,word指针看来真的有他的厉害之处啊。话不多说,开始总结。
第一篇总结解决一下什么是指针的问题,做了一个小DEMO简要说明指针的用法。
指针定义
指针是一个值为内存地址的变量(或数据对象)
自己的理解:上边的定义简单扼要的告诉我们指针就是变量,变量又是什么呢?变量就是一块内存,就是一个地址,说白了指针就是保存内存地址的变量,有的书上也说了,指针就是地址。为什么要有指针呢?因为C语言的一大特点就是可以直接对物理操作,厉害了我的哥,所以说指针是C语言的一大灵魂嘛。
用内存图(来源于网络)来帮助理解:
1.首先定义了一个整型的变量,也就是分配了一个名叫year的内存空间,存放的内容是2016
2.定义了一个整型的指针变量,将year的地址付给了变量,也就是右边的指针指向左边的变量,因为现在指针里边存放的是year的地址,&这个符号是取地址的意思,下边会讲到
指针声明
类型 + "*" + 变量名 = 指针
注:
1.C语言中NULL被定义为常量,第一行代表指针的初值设为空,表示指针不指向任何地址,不加有可能指向任意的地址
2.指针命名最好里边带有"P"
int *ptr=NULL; // 等价于void *ptr int *ptr_num; char *ptr_name; float *money_ptr; double *p_price;
怎么用?(附赠小DEMO)
- &:代表取地址
- *:代表根据地址,找到变量,然后取变量值
int num=9; int * ptr_num=# //取指针1的地址赋给指针2 int * ptr_num2=&ptr_num; //%p指针占位符 % x 16进制占位符 printf("num变量的地址是:%p\t%x\n",ptr_num,&num); printf("\n指针ptr_num的地址:%p\n",ptr_num2); //使用指针修改变量值 *ptr_num=9999;//找到地址所指的内存地址,把这个地址的值改为9999 printf("* ptr_num对应的值为:%d\n",*ptr_num);//取这个地址对应的值
上边的代码主要演示了一下:取变量地址和取地址对应变量的值,这两个操作,一个用的&,后一个使用*
上边代码也展示了如果通过操纵指针来改变变量的值,我们在看看内存是怎么体现的
综合的小DEMO:
int num1=1024; int num2=2048; int * ptr1; int *ptr2; ptr1=&num1; ptr2=&num2; printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1); printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2); //将变量1的值,赋给变量2 // num2=num1;*ptr2=*ptr1; 等价写法,可以把后者看成变量 //直接操作指针 ptr2=ptr1; //值没有变,地址变了 printf("重新赋值后:\n"); printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1); printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2); *ptr2=1111; printf("重新赋值后:\n"); printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1); printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2);
后记
了解一个概念就是反复的去实践,看看不同情况下的操作会得出什么样的结果,概念在实践中体会的会更加的深刻
0 0
- 带你认识指针——C语言的灵魂(一)
- 带你认识指针——C语言的灵魂(一)
- 指针——C语言的灵魂
- c语言的灵魂——指针
- 指针——C语言的灵魂
- c语言的灵魂——指针
- c语言的灵魂——指针(1)---转载
- c语言的灵魂——指针(2)----转载
- c语言的灵魂——指针(1)
- C语言学习笔记(五)——指针【C语言的灵魂】
- 转]C语言灵魂——指针
- C语言:指针,C的灵魂
- C语言:指针,C的灵魂
- 指针是C语言的灵魂
- C语言的灵魂--指针基本用法
- 指针->C的灵魂
- 带你认识指针(二)——指针与数组
- 今天学的是传说中的c语言灵魂指针。。
- Android设备如何加载.so文件以及如何适配
- Struts2框架学习(第六讲)
- Caffe:制作与训练自己的图片数据
- scrollView与xib
- 设计师要懂布局(五)
- 带你认识指针——C语言的灵魂(一)
- The RADIUS Session Process
- LeetCode 275. H-Index II
- @ResponseBody 中文乱码
- 解决java动态生成html文档为乱码的问题
- HDFS副本放置策略及机架感知
- anjularJS笔记-根据经纬度计算km
- 雷声大雨点小的冯小刚之《我不是潘金莲》观后感
- Bmob发送短信验证码官方demo更新(3.5.0)版本