传指针问题
//全局变量GA;
unsigned char GA=1;
unsigned char *uc;
unsigned char test(unsigned char *c)
{
c=&GA;
return 1;
}
main()
{
unsigned char ta;
unsigned char len;
len=test(uc);失败
//uc=&GA;//成功
ta=*(uc);
}
我通过函数传递地址就出错uc地址为0。如果去掉函数我直接给c附地址值,就ok了。但是我有多个参数要return只能传递形参。
请教形参如何传递才能成功!谢谢高手
[解决办法]
unsigned char GA=1;unsigned char *uc;unsigned char test(unsigned char **c){ *c=&GA; return 1;}main(){ unsigned char ta; unsigned char len; len=test(&uc); ta=*(uc);}
[解决办法]
函数传参的时候是传的拷贝,而不是原值,就像你传max(int a,int b)一样,在max中改变a和b不是改变原来的变量。你在上述代码中也是如此,可能你会认为传指针会间接的改变原来的变量,但是你可能忽略了指针也是变量,传指针时也是穿的拷贝。所以解决方法就是你要传指针的地址,而不是指针的内容。1楼正解,2楼是c++的。
[解决办法]
在test函数中,要改变全局指针uc(而不是uc指向的内容),
所以test的形参应该是“指向指针的指针”。
#include <stdio.h>#include <stdlib.h>unsigned char GA = 1;unsigned char *uc = NULL; unsigned char test(unsigned char **c){ *c = &GA; return 1;}int main(){ unsigned char ta; unsigned char len; len = test(&uc); ta = *(uc); return 0;}
[解决办法]
//全局变量GA;unsigned char GA=1;unsigned char *uc;unsigned char test(unsigned char *c){ *c=GA; // 赋值 return 1;}main(){ unsigned char ta; unsigned char len; uc = (unsigned char *)malloc(sizeof(unsigned char)); // 为全局指针分配内存 len=test(uc); ta=*(uc);}