C语言指针函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 14:12:24
运行下列C语言代码段,输出的结果是()。(选择一项)
#include<stdio.h>
void func(int*a,int b){
b=4;
*a=b+2;
}
void main()
{
int a=2,b=2;
func(&a,b);
printf(“%d,%d”,a,b);
}

a) 6,4
b) 6,2
c) 2,2
d) 2,4

能详细解答一下吗?感激不尽

简单说就是 C语言是值传递,也就是说 b肯定是不变的,那么a呢,a是个指针,如果修改指针本身,那么a也不变——说不定根本访问不了了,但是 修改的a指向的值 *a=6,就是a指向了6,所以 a指向的值变了 但是a没有变!

b
C里的函数参数传递是按照副本传递的原则,也就是实参的一个副本传递给函数,所以函数func对b的值没有任何影响。a是一个指针,函数体修改了a所指的位置的值,也就是把a在内存中的值变成了6,所以最后a的值就是6。

b
这个c里面局部变量的问题。func定义的b只有在func这个函数里有用,这个函数执行完b的值后回复到main函数里b的值,而a的值修改的是a所在的地址,所以改变的话适用于所有函数,这个如果不清晰的话你可以好好看一下c的局部变量那章的问题

b,函数没有将b的值返回来,对b的值没有影响。
a的地址为参数,也就是子函数在a的地址中装入了b+2,b也被重新赋值为4,所以变量a变为6.