指针将值传递
原文地址:https://www.cnblogs.com/liqinglucky/p/pointer_value.html
指针
#include<stdio.h> void msg(int *in,int *out) { int *sen; int *rec; sen = in;//send的地址通过in赋值给sen rec = out;//recv的地址通过out赋值给rec *rec = *sen;//改变rec存放地址的内容 } void main(void) { int send = 1; int recv; int *in =&send; int *out =&recv; msg(in,out); send=2;//改变send的值 printf("recv=%d,*in=%d\n",recv,*in); }
运行结果
recv=1,*in=2
recv的值在msg函数中重新赋值了,存放内容改变为原来的send的值。而in是一个指针变量,存放的是send的地址,当用*in查找该地址的内容时,找到的是新的赋值。
当指针变量被传递并且如果值被修改,则在调用者作用域内更新是有效的。假定我们有一个超过15个数据成员的非常大的结构体变量,指针相比传递地址,如果按值传递发送这个变量到函数将花费更多时间。
指针就是我们做PPT时想插入一本书,如果把整本书内容都复制到PPT,占用的版面是特别多的。通常我们就插入一个超链接到指定的文件夹下的书名。只要我们点击超链接,就能找到那本书。但也可能出现这样的错误,如果我们把书移动到另一个文件夹了,超链接就失效了。就如指针地址为NULL一样。