大三,但是C语言。目标:高屋建瓴,深入浅出。
注意所有人在最开始学C语言的时候,老师都会和你说指针指向一个空间。这么说也没错,但是没有说明白指针的本质。本文仅讨论一级指针与普通变量的关系。
指针的本质指针,从本质上来说,也是变量。你要知道,只要是数据,就需要空间去储存。无论是指针变量还是普通变量,本身都是变量,都有地址。所以指针和普通变量从储存上来说没有区别,区别只在于储存的内容不同,以int i=10举例。
从使用上来说,指针和变量有何区别?上代码:
#includeint main(void)
{int i1=1;
int i2=i1;
int* p1=&i1;
int* p2=p1;
i1=2;
printf("%d\n",i1);
i2=3;
printf("%d\n",i1);//i1和i2没关系
printf("%p\n%p\n",&i1,&i2);
*p1=4;
printf("%d\n",i1);
*p2=10;
printf("%d\n",i1);//p1和p2有关系
printf("%p\n%p\n%p\n%p\n",p1,p2,&p1,&p2);//p1和p2储存的值相同,都是i1的地址,但是他们本身是两个不同的变量,p1和p2的地址不同
return 0;
}
看下运行结果:
进一步,用图形,以及地址的方式来解释一下他们的关系:
首先你应该明确,函数的传参是复制一份,进入函数里的变量是函数外面的变量的副本。
既然指针变量和普通变量本质上都是变量,那么当参数给函数传值的时候,其实都是复制一份过去的。那么用变量当参数和用变量的指针做参数有什么区别呢?
其实我们前面的程序已经给出了答案,i2和p2分别是i1和p1的副本:
前面说了这两种传法的区别,这里说一下什么时候传变量,什么时候传指针:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧