黑马程序员——C语言日志——指针、地址和变量值
2015-09-28 22:51
337 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
这篇文章主要讲述如何利用地址存取变量值。我们知道,指针变量存储的是变量的地址,通过指针可以存取变量的值,下面看一个简单地例子:
上面这段程序中将变量m的地址存在了指针变量a中,通过*a读取和改变了m中的值,那么我们现在看看指针变量中存的这个地址具体是什么值,通过下面这段代码,我们打印出m的地址
0012FF7C
都为十六进制数据0X12FF7C,那么既然知道指针变量里面存储的值,也就是变量m的地址,那么我们怎么利用这个 地址直接存取其中的值呢?
打印结果:7,8
那么我们成功利用这个地址数据读取和改变了这个地址中的值,下面来分析一下这两行代码
0X12FF7C只是一个整型数据,而指针变量a中存储的是整型的指针类型的数据(int*),所以需要将0X12FF7C这个整型数据先强制转化为int*,(int*)0X12FF7C,这样一来,指针变量a==(int*)0X12FF7C,*a==*(int*)0X12FF7C,所以,上面这两行代码就跟下面这两行代码是等价的:
这篇文章主要讲述如何利用地址存取变量值。我们知道,指针变量存储的是变量的地址,通过指针可以存取变量的值,下面看一个简单地例子:
#include"stdio.h" #include"stdlib.h" void main() { int m=7,re; //定义变量m int *a=&m; //定义指针a,并将m的地址赋予a re = *a; //读取m的值 *a=8; //改变a所指向的地址内的值 printf("%d,%d\n",re,m); //打印 system("pause") ; //DOS窗口停留 }打印:7,8
上面这段程序中将变量m的地址存在了指针变量a中,通过*a读取和改变了m中的值,那么我们现在看看指针变量中存的这个地址具体是什么值,通过下面这段代码,我们打印出m的地址
#include"stdio.h" #include"stdlib.h" void main() { int m=7; //定义变量m int *a=&m; //定义指针a,并将m的地址赋予a //*a=8; //改变a所指向的地址内的值 printf("%X\n",a); //以十六进制格式符打印 printf("%p\n",a); //以指针格式符打印 system("pause") ; //DOS窗口停留 }打印结果:12FF7C
0012FF7C
都为十六进制数据0X12FF7C,那么既然知道指针变量里面存储的值,也就是变量m的地址,那么我们怎么利用这个 地址直接存取其中的值呢?
</pre><pre name="code" class="cpp">#include"stdio.h" #include"stdlib.h" void main() { int m=7,re; //定义变量m int *a=&m; //定义指针a,并将m的地址赋予a re = *(int*)0X12FF7C; //读取改地址中的值,也就是m的值 *(int*)0X12FF7C = 8; //改变地址内的值,也就是m的值 printf("%d,%d\n",re,m); //打印re,m system("pause") ; //DOS窗口停留 }
打印结果:7,8
那么我们成功利用这个地址数据读取和改变了这个地址中的值,下面来分析一下这两行代码
re = *(int*)0X12FF7C; //读取改地址中的值,也就是m的值 *(int*)0X12FF7C = 8; //改变地址内的值,也就是m的值
0X12FF7C只是一个整型数据,而指针变量a中存储的是整型的指针类型的数据(int*),所以需要将0X12FF7C这个整型数据先强制转化为int*,(int*)0X12FF7C,这样一来,指针变量a==(int*)0X12FF7C,*a==*(int*)0X12FF7C,所以,上面这两行代码就跟下面这两行代码是等价的:
re = *a; //读取m的值 *a=8; //改变a所指向的地址内的值好了,今天就到这里,希望读者看过这篇文章之后,能够更好地理解指针的含义。
相关文章推荐
- C++中有关STL自带的排序函数:sort、qsort
- C/C++ printf函数参数的执行顺序
- POCO C++例程整理--有关线程 推荐
- c语言学习笔记(9)优先级及类型转换分析
- 就拿C++指针传递、引用传递开博吧
- 系统学习ARM之五 --C语言和汇编混合编写
- C语言项目总结-通讯录
- C++按格式接收输入字符(京东,滴滴,360笔试必用)
- C语言第八节-文件操作
- C++按格式接收输入字符(京东,滴滴,360笔试必用)
- c++设计模式----状态模式state
- C语言第七节-结构体-枚举-typedef
- C语言第六节-指针
- C语言第五节-原码-数组-字符串
- C语言第四节-函数
- C语言第三节-顺序,分支,循环
- 单向链表基本操作(C语言实现)
- 浅析插入排序
- c语言指针的之交换两个数的值
- scala调用c/c++代码