首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

传指针有关问题

2012-04-13 
传指针问题//全局变量GA;unsigned char GA1;unsigned char *ucunsigned char test(unsigned char *c){c

传指针问题
//全局变量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只能传递形参。
请教形参如何传递才能成功!谢谢高手

[解决办法]

C/C++ code
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的形参应该是“指向指针的指针”。


C/C++ code
#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;}
[解决办法]
C/C++ code
//全局变量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);} 

热点排行