c语言有关作用域的问题

假设voidmain(){structStudent*p//调用这个函数会return回一个指针p=create();//这个时候如果再把p传进某个函数insert(p)... 假设
void main()
{
struct Student *p

//调用这个函数会return回一个指针
p = create();

//这个时候如果再把p传进某个函数
insert(p);
//调用这个函数把p的内容输出
list(p);

这个时候出问题了,我在insert这个函数里面把传进去的p的指向改了,然后在主函数里输出的时候,好像我在insert里改变的p的指向,并没有影响的主函数里原来的那个p.

}
展开
 我来答
拥抱Linux
2019-01-15 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2160
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部
按你的说法,你在「insert(p);」这一句传入了指针p,实际上只是把main()中的指针p传递给了insert()函数的形式参数。
而一旦进入insert()函数之后,就算在insert()函数中,传入参数的名字也是p,它也只不过是main()中的指针p的地址的一个拷贝而已。你把insert()中的这个叫p的指针的指向改变了,实际上只是改变了从main()传来的指针p的一个拷贝的指向而已,最后如果你不把改变指向后的指针返回并赋值给main()中的p的话,main()中的p肯定是不会变的。
或者,在main()函数中,把指针p的本身的地址传递作为形式参数传递给insert()函数,这样的话,在insert()函数中改变了位于内存中那个地址的指针的指向的话,那么即使不使用return语句,在回到main()函数之后,原来的指针p的指向也变了,毕竟指针所在的内存地址就一个嘛,它同一时间也只能指向一个位置,所以在insert()里把位于这个地址的指针的指向改变了的话,在main()里读取到位于这个地址的指针的时候,这个指针的指向也是被改变之后了的,因为它不能既指向这个位置又指向那个位置。

(如有帮助,烦请采纳,谢谢!)
更多追问追答
追问
就是说要看这个变量本身是什么类型的,和普通变量一样,普通变量的话要传址要取他的地址传进去,但他本身就是一个指针变量了,要传这个指针变量的地址的话要再取一次地址,就需要一个指针的指针 是这样吗
追答

是的。

电脑上写了半天,被百度吞了!

贴一段代码,你看看吧。

#include <stdio.h>

void a_change(int **h)  // change the direction of pointer's self address 
{
    int k=20;
    *h=&k;
}


int* b_change(int *m) // change the value of pointer's box
{
    int n=10;
    *m=n;
//or
//    m=&n;
    return(m);
}


void main()
{
int a,b,*p,*q;
a=2,b=4;

printf("change the direction of pointer's self address.\n");
a_change(&p);
printf("*p is %d.\n",*p);

printf("change the value of pointer's box.\n");
q=&b;
q=b_change(q);
printf("*q is %d.\n",*q);

}
晶鱼小公举
2019-01-15 · 超过35用户采纳过TA的回答
知道答主
回答量:200
采纳率:62%
帮助的人:44.2万
展开全部

你要改变主函数的p 的指向的话必须要insert返回一个指针赋给p 才行,单独在调用的函数里面改变指向是不会影响到main 函数的。下面也有一个小例子供你参考。


希望能帮到你

更多追问追答
追问
这里我知道.这里是值传递的,我有点搞不懂的就是我那个p本身不是一个指针吗,传进去的时候难道传的也是值.
追答
指针变量的值就是指针的指向呀。所以所要达成的目标也是通过函数改变值,跟普通变量是一样的,也需要return
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式