首页 > 试题广场 >

下面程序段的输出结果是( )。

[单选题]
下面程序段的输出结果是(    )
#include<stdio.h>
void fun(int px, int pa, int *pb){ 
     *pb = pa + px;
     pa = *pb + px;
}
int main(){ 
     int  x = 4, a = 2, b = 2;
     fun(x, a, &b);
     printf("%d,%d", a, b); 
}



  • 2, 2
  • 2, 6
  • 6, 2
  • 6, 6
推荐
选B
【分析】该题考的主要是传值与传址的区别。在编程中,传值只是指向了变量的值以使用,而传址是指向了变量的地址,对变量本身进行操作。
      在本题中变量a是传值,并不对变量本身操作,所以值不变(仍为2)
      变量b是传址,对变量本身直接操作,所以值变化(b=a+x=2+4=6)
所以答案选B,a=2,b=6
编辑于 2019-03-07 14:24:40 回复(1)
选B.
pa是局部变量,不影响fun()函数外a的值。
pb是变量b的地址,*pb表示该地址指向的内容被改变,即变量b的值,所以*pb赋值改变了变量b的值,b=6
发表于 2019-03-06 18:50:54 回复(0)
选B,本质上要抓住修改一个变量的值需要定位到变量的地址,否则无法将修改。
首先需要搞清楚函数里面形参的定义,形参是函数的局部变量,在函数创立时分配内存,函数结束时释放内存,所以题中px,pa所存的内容在函数结束时就释放了,pa=10,但这个跟全局变量a没有任何关系,a和pa存取在不同的内存空间,传入的时候只是拷贝一份值,pb传入的是int*,存取的是b的地址,函数对pb指向的内容进行了修改,本质上就在计算机内部b地址所指向的内存空间修改了内容,所以即使函数运行完成,存取地址的内存空间pb被释放了,但b内存地址内的内容被修改了。
不知道这样你是否能理解?
如果有问题欢迎讨论。
发表于 2019-03-06 15:36:45 回复(0)
B.要改变变量值的值要传入指针,要改变指针的值要传入二级指针
发表于 2019-03-06 14:44:33 回复(0)
答案:B
        如果要改变传入的变量的值,可以使用引用传递或者指针传递,题目中b通过指针传递,而a只是简单的值传递,因此a的值不变,为2,而b的值变为6
发表于 2019-03-06 16:22:29 回复(0)
选B

【分析】:

传到fun中的a相当于一份值的拷贝,只是值是相等,相当于创建了一个pa变量,然后赋予相同的值,在里面对pa进行运算,并不会影响main里面的a。
而b的话,相当于把指向b的那个指针传进去了,在fun里面对pb进行运算,就会导致main里面的b也发生改变。
编辑于 2019-03-06 14:45:37 回复(0)
选B

【分析】:
fun函数中px和pa作为值传递接受a的是一个局部变量,不影响主函数中a的值,因此a的输出结果为2;而int* pb作为指针传递,接受的是实参&b传递过来的地址,改变*pb的值实际上就是改变了实参b的值,因此b输出结果为6
所以输出结果为2,6 选择B选项
编辑于 2019-03-06 18:31:21 回复(0)
这个函数无返回值
发表于 2024-08-28 20:40:48 回复(0)
a是传值,对变量本身不进行操作,a不变为2;b是传址,对变量本身进行操作,b为2+4=6
编辑于 2024-03-21 19:33:21 回复(0)
x,a在 进行传递的时候并不是传的地址只是把值传过去了,当fun函数执行玩完之后里面的值就被内存回收所以x a的值并没有发生改变,而b则是进行的穿址调用
发表于 2022-07-26 15:59:13 回复(0)
fun(x,a,&b)   这句程序只是把a的值传递给形参,这个传递是单向的,a的值不会变  但是b传的是地址,b的值会改变

记住:如果想要改变传入变量的值,可以使用指针传递它的地址,也可以使用变量的别名
发表于 2021-05-10 20:39:28 回复(0)
发表于 2019-03-06 19:04:06 回复(0)
答案是B,因为pa是仅传值,只是局部变量在子函数内部起作用,所以pa的改变并不会改变主函数中a的值,而pb是指针变量,传的参数为b的地址,因此*pb会改变b的值,因此输出2,6
发表于 2019-03-06 18:47:01 回复(0)
B,只有指针传递才会修改原来的变量
发表于 2019-03-06 18:16:41 回复(0)
B。
a-是值传递,不用看,肯定不影响。
b-是指针传递,直接操作相同的地址。
还有一种引用传递int & b,也是直接操作地址。
发表于 2019-03-06 15:57:56 回复(0)
B
发表于 2019-03-06 15:02:03 回复(1)
B
fun(x, a, &b) 中b传的是地址,在函数中修改地址指向的值,故b为2+4=6,而a不变,
因此答案为2, 6

发表于 2019-03-06 14:47:45 回复(0)