C语言用指针作函数参数

Python011

C语言用指针作函数参数,第1张

选D

因为第一个参数是地址传递,fun(&b,a)中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。

第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。

改成下面代码看看:

#include <stdio.h>

void abc(int *i,int *j)

{

int m

m=*i //指针变量的值也就是地址不能赋值给一般变量

*i=*j//*i,*j才是指针变量指向的变量的值

*j=m   

}

void main()

{

int a,b

int *pa=&a,*pb=&b

printf("请输入a,b的值:")

scanf("%d,%d",&a,&b)

abc(pa,pb)  //

printf("a=%d\tb=%d\n",a,b)

}

需要理解指针其实就是一个地址,那么它就就是一个数字,你可以把他看做int来理解就好理解了比如有函数:void test(int){ a = 0}void main(){ int a = 2test (a)}即使在函数里把a赋成了0,但是main中的a的值并未改变,这就是因为函数中用到的a只是一个副本。_p=p说明他们指着同一块地址啊?具体到你的这个代码来解释,一开始调用的时候p=NULL,_p也为NULL,在函数里申请了内存,并把申请到的内存地址赋个了_p,这时_p就指向新的地址了,而原来的p还是NULL,这个时候p!=_p了,退出函数后_p这个副本就没有了,而你原来的那个指针还是NULL为_p申请内存空间,不是==为p申请么??申请空间并不是为指针申请,申请了指针以后把地址给了_p,但是没有给p,_p又是临时变量,所以你申请这块内存就浪费掉了,因为你找不到他的地址了。 如果你想让p指向新的内存的话建议使用指向指针的指针修改成这样就可以了:void GetMemory(char* *p, int num) { (*p) =(char *)malloc(sizeof(char)*num)} void Test(void) 听说那个小兰兰被鱼刺卡到了,活该,哈哈{ char *str = NULLGetMemory(&str, 100)/*str 仍然为 NULL*/strcpy(str, "hello")/*运行错误*/ }