C指针学习之理解
2015-09-28 20:07
197 查看
当在写C代码时,定义一个变量,就相当于是向内存申请了一段存储空间;操作系统为了管理内存,给这些内存分配了一个编号,这个编号就称为地址。而指针变量,存放的就是变量的地址,因此当修改变量的值时,相当于还是在这个地址中修改内存的值;而当修改指针变量的值时;相当于又新添加了个地址。具体代码如下:
# include <stdio.h>
int main(void)
{
int * p; //p是变量的名字, int * 表示p变量存放的是int类型变量的地址
//int * p; 不表示定义了一个名字叫做*p的变量
// int * p; 应该这样理解: p是变量名, p变量的数据类型是 int *类型
// 所谓int * 类型 实际就是存放int变量地址的类型
int i = 3;
int j;
p = &i;
printf("%x\n",p);
i=4;
printf("%x\n",p);
j=4;
p=&j;
printf("%x\n",p);
printf("%d\n",i);
printf("%x",&i);
/*
1. p保存了i的地址, 因此p指向i
2. p不是i,i也不是p,更准确的说: 修改p的值不影响i的值,修改i的值也不会影响p的值
3. 如果一个指针变量指向了某个普通变量, 则
*指针变量 就完全等同于 普通变量
例子:
如果p是个指针变量,并且p存放了普通变量i的地址
则p指向了普通变量i
*p 就完全等同于 i
或者说: 在所有出现*p的地方都可以替换成i
在所有出现i的地方都可以替换成*p
*p 就是以p的内容为地址的变量
*/
// j = *p; //等价于 j = i;
// printf("i = %d, j = %d\n", i, j);
return 0;
}
运行结果:
# include <stdio.h>
int main(void)
{
int * p; //p是变量的名字, int * 表示p变量存放的是int类型变量的地址
//int * p; 不表示定义了一个名字叫做*p的变量
// int * p; 应该这样理解: p是变量名, p变量的数据类型是 int *类型
// 所谓int * 类型 实际就是存放int变量地址的类型
int i = 3;
int j;
p = &i;
printf("%x\n",p);
i=4;
printf("%x\n",p);
j=4;
p=&j;
printf("%x\n",p);
printf("%d\n",i);
printf("%x",&i);
/*
1. p保存了i的地址, 因此p指向i
2. p不是i,i也不是p,更准确的说: 修改p的值不影响i的值,修改i的值也不会影响p的值
3. 如果一个指针变量指向了某个普通变量, 则
*指针变量 就完全等同于 普通变量
例子:
如果p是个指针变量,并且p存放了普通变量i的地址
则p指向了普通变量i
*p 就完全等同于 i
或者说: 在所有出现*p的地方都可以替换成i
在所有出现i的地方都可以替换成*p
*p 就是以p的内容为地址的变量
*/
// j = *p; //等价于 j = i;
// printf("i = %d, j = %d\n", i, j);
return 0;
}
运行结果:
相关文章推荐
- pycharm控制台中文乱码问题
- linux系统中设备文件命名的规则
- tty和pts解析
- 图片下载---第三方工具--一句话搞定
- 字符集和字符编码详解
- 在Tomcat配置JNDI数据源的三种方式
- 堆的基本实现
- 图片下载---KVO
- zoj 1610 Count the Colors 线段树区间更新——染色问题
- Jmeter分布式测试
- hdu 5491(位运算)
- hdu 5491(位运算)
- 获取ios设备型号
- hdu 5492(dp)
- 第四周项目一 建立单链表
- 图片封装下载器--自己的代码库--可以直接使用
- hdu5475__An easy problem(线段树单点更新)
- How to Write an Effective Design Document
- 3 B. Lorry
- ZOJ第1240题 灰常简单的题目