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语言,以上信息部分内容来自某老师的教程,自己写的心得,希望和大家一起交流学习,共同进步!