带你认识指针——C语言的灵魂(一)
来源:互联网 发布:印度进出口数据 编辑:程序博客网 时间:2024/05/01 08:07
前言
最近复习考研的知识,有机会研究一下C语言的指针,今天就总结一下有时候让我们爱的要死,有时候也恨得要死的指针,到底是什么?书里指针那章的序言说到了,不掌握指针就是没有掌握C的精华,word指针看来真的有他的厉害之处啊。话不多说,开始总结。
第一篇总结解决一下什么是指针的问题,做了一个小DEMO简要说明指针的用法。
指针定义
指针是一个值为内存地址的变量(或数据对象)
自己的理解:上边的定义简单扼要的告诉我们指针就是变量,变量又是什么呢?变量就是一块内存,就是一个地址,说白了指针就是保存内存地址的变量,有的书上也说了,指针就是地址。为什么要有指针呢?因为C语言的一大特点就是可以直接对物理操作,厉害了我的哥,所以说指针是C语言的一大灵魂嘛。
用内存图(来源于网络)来帮助理解:
1.首先定义了一个整型的变量,也就是分配了一个名叫year的内存空间,存放的内容是2016
2.定义了一个整型的指针变量,将year的地址付给了变量,也就是右边的指针指向左边的变量,因为现在指针里边存放的是year的地址,&这个符号是取地址的意思,下边会讲到
指针声明
类型 + “*” + 变量名 = 指针
注:
1.C语言中NULL被定义为常量,第一行代表指针的初值设为空,表示指针不指向任何地址,不加有可能指向任意的地址
2.指针命名最好里边带有”P”
- <span style=“font-size:18px;”> int *ptr=NULL; // 等价于void *ptr
- int *ptr_num;
- char *ptr_name;
- float *money_ptr;
- double *p_price;</span>
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);//取这个地址对应的值
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);
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语言灵魂指针。。
- 51nod 1127 最短的包含字符串【尺取法】
- Hrbust2016年校团队赛E题
- [LeetCode]Recover Binary Search Tree
- 20161210-Allegro中的Flash和Thermal Relief
- ANSI C (6) —— 指针、断言、信号、跳转
- 带你认识指针——C语言的灵魂(一)
- 杭电2018之母牛的故事
- Android的简易弹幕
- 测试
- HTML5-canvas:hybrid框架下黑屏解决方案
- @IDEA IntelliJ IDEA 15 创建普通 Java Web 项目
- SSM框架 之 Spring-AOP(面向切面编程)
- c/c++编程题 之 求sin(x)近似值
- CentOS6.8启动报错:Could not update ICEauthority file /var/lib/gdm/.ICEauthority