繁体   English   中英

C函数内部的指针

[英]Pointers inside function in C

#include<stdio.h>

int q = 10;

void fun(int *p){
    *p = 15;
    p = &q;
    printf("%d ",*p);
}    

int main(){
  int r = 20;
  int *p = &r;  
  fun(p);
  printf("%d", *p);
  return 0;
}

我在玩指针。 无法理解此输出。 输出为10 15.当p指向q的地址时,为什么返回主函数时其值会改变? 也是为什么将其更改为在函数“ 10”之前为其分配的值“ 15”。

因为pfun() ,所以main() p 每个函数中的p是局部的。 因此,更改一个不会影响其他。

在C语言中, 所有函数参数均按值传递,包括指针。

*p = 15; 会将 r设置为15,因为*p指向main() r占用的内存,然后将其重新分配给&q

您的重新分配p = &q; 没有什么改变p于呼叫点main() 为此,您需要将指针间接加倍,即将函数原型更改为void fun(int **p){ ,然后使用fun(&p);对其进行调用fun(&p); ,然后使用*p = &q;重新分配

两步:

  1. 首先调用fun() ,在函数作用域内的 p分配全局int q [保持值10]的地址并打印。 第一个输出==> 10 ;

  2. 调用从fun()返回后,它将保留先前的地址[从main()传递],因此将打印该地址所保留的值[在fun()内部修改的值为15 ]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM