c与指针初步理解
来源:互联网 发布:站长链接php提交实例 编辑:程序博客网 时间:2024/05/04 17:17
最近看了一下c语言,最开始对指针懂得模模糊糊的,再看一次有了新的理解。
从内存结构图可以看出指针与普通变量的的关系:
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
从内存来讲的释义:
首先在内存中创建一块区域,在这个区域中存储了1这个数字的值(二进制形式),并分配一个内存中首地址的编号,a中保存这个编号。
printf("%d",a)等于:调用相当于根据这个首地址,取出这一块内存区域中存储的值,
&a 等于 :取出a变量中保存的首地址的编号,也叫取地址。
*/
/* int *b:定义一个int型指针变量b,a指向的是一块内存区域的首地,这首地址所代表的内存区域中所保存的是一个指针(也就是地址,指针==地址),不能保存实际的数据,所以赋值方式只能是这样:b = &a;
从内存来讲的释义:
首先在内存中创建一块区域,在这个区域中存储了指针(也就是地址),并分配一个内存中首地址的编号,b中保存这个编号。
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针
printf("%d",*b)等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的值,
&b 等于 :取出b这个指针变量中保存的首地址的编号,也叫取地址。
取出的类型是 int **b(指针的指针)
*/
/* b = &a:取出变量a的首地址,并把这个地址赋值给指针变量b,这样b指向的就是a所代表的内存区域的地址,
也就是说b中保存的是a的地址,并不是一个实际的值,(指针类型变量中只能保存地址)
从内存来讲的释义:
内存中有一个内存单元b,b中存储的是a的地址。所以操作*b就等于是在操作a;把a的内存地址存到b的内存单元格中:
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针;
printf("%d",*b)等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的值,这里等于取出来的是a所代表的内存单元中存储的值;
&b 等于 :取出b这个指针变量中保存的首地址的编号,也叫取地址。
取出的类型是 int **b(指针的指针)
*/
/* *b = 2:取出指针变量b的首地址对应的内存单元中的值(就是a的地址),然后把这个地址对应的内存单元格
中实际存储的值修改为2;
从内存来讲的释义:
内存中有一个内存单元b,b中存储的是a的地址。所以操作*b就等于是在操作a;把a的内存地址存到b的内存单元格中:
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针;
*b = 2:,等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的内存单元中值,这里等于取出来的是a所代表的,这里就是在向这个内存单元赋值,把原来的1改成2;
*/
从内存结构图可以看出指针与普通变量的的关系:
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
例如下面的小例子:
以下为小例子的注释:
/* int a = 1:定义一个int型变量a,并赋值1,a指向的是一块内存区域的首地从内存来讲的释义:
首先在内存中创建一块区域,在这个区域中存储了1这个数字的值(二进制形式),并分配一个内存中首地址的编号,a中保存这个编号。
printf("%d",a)等于:调用相当于根据这个首地址,取出这一块内存区域中存储的值,
&a 等于 :取出a变量中保存的首地址的编号,也叫取地址。
*/
/* int *b:定义一个int型指针变量b,a指向的是一块内存区域的首地,这首地址所代表的内存区域中所保存的是一个指针(也就是地址,指针==地址),不能保存实际的数据,所以赋值方式只能是这样:b = &a;
从内存来讲的释义:
首先在内存中创建一块区域,在这个区域中存储了指针(也就是地址),并分配一个内存中首地址的编号,b中保存这个编号。
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针
printf("%d",*b)等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的值,
&b 等于 :取出b这个指针变量中保存的首地址的编号,也叫取地址。
取出的类型是 int **b(指针的指针)
*/
/* b = &a:取出变量a的首地址,并把这个地址赋值给指针变量b,这样b指向的就是a所代表的内存区域的地址,
也就是说b中保存的是a的地址,并不是一个实际的值,(指针类型变量中只能保存地址)
从内存来讲的释义:
内存中有一个内存单元b,b中存储的是a的地址。所以操作*b就等于是在操作a;把a的内存地址存到b的内存单元格中:
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针;
printf("%d",*b)等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的值,这里等于取出来的是a所代表的内存单元中存储的值;
&b 等于 :取出b这个指针变量中保存的首地址的编号,也叫取地址。
取出的类型是 int **b(指针的指针)
*/
/* *b = 2:取出指针变量b的首地址对应的内存单元中的值(就是a的地址),然后把这个地址对应的内存单元格
中实际存储的值修改为2;
从内存来讲的释义:
内存中有一个内存单元b,b中存储的是a的地址。所以操作*b就等于是在操作a;把a的内存地址存到b的内存单元格中:
printf("%d",b)等于:取出b这个指针变量的首地址对应的值,取出这一块内存区域中存储的指针,取出来的是一个指针;
*b = 2:,等于:取出b这个指针变量的首地址对应的内存区域中所保存的实际的值(也就是一个指针、地址),然后再取出这一个地址编号对应的内存单元中值,这里等于取出来的是a所代表的,这里就是在向这个内存单元赋值,把原来的1改成2;
*/
程序代码:
#include "stdafx.h"int main(){ int a = 1;//定义int类型变量a,并初始化值为1 int *b;//定义int类型指针变量b b = &a;// 把a所指向的内存地址赋给b这个指针变量,b所指向的内存单元中保存的就是a的地址。 *b = 2;//等价于a=2,这里实际上操作的就是a,所以a也会改变。 //通过打印下面的地址,可以观察出b中真正保存是什么,其实就是保存了a的地址。 printf("&a=%d,&b=%d,&(*b)=%d",&a,&b,&(*b));}
0 0
- c与指针初步理解
- C语言中的指针初步理解
- 深入理解C与指针
- C指针初步了解
- c++ 智能指针初步理解
- 对指针的初步理解
- 对指针的初步理解
- 对指针的初步理解
- C语言 数组与指针的理解
- C语言 数组与指针的理解
- C语言指针与数组 理解
- 深入理解C指针与数组-总结
- 2---C语言|笔记【对C语言指针的初步理解】
- C中指针数组与数组指针的理解
- C语言中的指针数组与数组指针的理解
- 指针数组与数组指针(C++,简单理解)
- <C语言>“指针数组与数组指针+指针函数与函数指针”---区别理解
- 指针与内存管理初步
- 使用最新struts2(2.3.15.2),不能使用DMI动态调用方法。在struts.xml中打开动态方法调用。
- 黄岛挡土墙倒塌的
- 梁家辉女儿窍
- 基于智能手机的加速计进行计步实现。
- 娜姐教你玩转git
- c与指针初步理解
- Android 虚线、圆角、渐变
- 面向对象分析
- Windows程序的生与死---窗口的生命周期
- java商城开发可以说是日臻完美
- [置顶] volatile、内存屏障、Acquire&Release语义 三者的差别和关系(二) —— 之内存屏障
- 圆形图片(最多两条边线)以及圆角图片的实现
- Bind JNI functions with a Java object
- wcf 并发