您的位置:首页 > 其它

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;

}

运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: