【C语言笔记】指针基础讨论
本帖最后由 SupKevin 于 2017-4-4 17:17 编辑# include<stdio.h>
Int main(void)
{
int * p;
int i = 3;
p = &i;
}
C语言的指针皮毛(定义的理解)
Int * p;指的是“int *”的变量,即P是“int *”的变量。
术语解析:指针(in * p 【在我个人理解中,这应该是个存放int类型的地址的指针】)与指针变量:(p)
“int * p”//p 是变量的名字,int * 表示P变量存放的是Int 类型的地址;
Int * p 不表示定义了一个名字叫做 *p 的变量;
Int * p 正确的理解为: p 是变量名,p变量的数据类型是 int型(地址)
所谓 int * 型实际就是存放int 型变量地址的类型,通俗来说,p 就是int * 型的变量;如果 int I= 5;则p的类型和i的类型不一样,前者是int * 型(存放的是Int 类型的地址)的变量,后者是int 型的变量;
*p和P的具体区别
1.p保存了i的地址(p =&i),因此p是指向i,即 p= &i;
2.p不是i,i也不是p,更准确的说:修改p的值不影响i;
3.如果一个指针变量(在本例中为p)指向了某个普通变量,则 *指针变量 == 普通变量。
例如:
如果p是个指针变量,并且p存放了普通变量的i的地址,则p指向了普通变量i,即 *p = i;(因为p存放的是int型地址的变量,i也是int型变量,所以相等了呗)
常见错误
如果定义了指针变量,那么指针变量就必须有指向;如果没有指向,则存储的是系统内的垃圾值。例如在本例中,p = &i;这个就是p指向i;这样的话*p才有意义,否则,*p存放的就是内存单元的某一个垃圾值。
# include<stdio.h>
int main(void)
{
int * p;
int i = 5;
int * q;
q = &i;//q指向i的;
p = q;//p赋值给p因为两者都是int * 的变量,故可以相互赋值。此时相当于p也是有了指向,即p也和q一样指向了i的地址
printf("%d\n",*p);//此时*p = *q =i;
return0;
}
本人小白一枚,因为对编程有兴趣,自学c语言,以上信息部分内容来自某老师的教程,自己写的心得,希望和大家一起交流学习,共同进步! caixl5 发表于 2017-3-13 23:13
多些,c语言我学得差不多了,,谢谢
要想深刻理解指针,必须和内存联系在一块,楼主加油,还有很长的路要走 加油 c的指针学好了 用活了 会很爽的 操作起内存来如入无人的境界。要想深入的理解学习 最好能结合asm汇编。 感谢楼主,辛苦了 感谢楼主啊 ★邪梦 发表于 2017-3-13 21:27
感谢楼主,辛苦了
大家互相学习:loveliness: ★邪梦 发表于 2017-3-13 21:27
感谢楼主,辛苦了
一起交流学习,不辛苦:loveliness: 看不懂啊,从零学起 CChonor 发表于 2017-3-13 21:40
谢谢楼主,学到了
互相学习 2017031313 发表于 2017-3-13 21:42
看不懂啊,从零学起
恩恩 一起学习 共同进步!!! 感谢楼主,辛苦了 一起学习 共同进步!