您的位置:首页 > 编程语言 > C语言/C++

c语言指针类型参数的传递方式

2006-12-17 20:04 267 查看
       C语言中数组类型和函数类型的参数只能是按地址传递参数;而整数类型、字符类型、浮点类型、枚举类型、指针类型、结构类型和联合类型只能是按值传递参数,这其中指针类型的参数传递方式最容易迷惑。
       下面看一个简单的例子:
       void set(char *p){
              p=NULL;
              printf("address of p is %d/n",(signed)p);
       }
 
       void main()
       {
              char *str,a='A';
              str=&a;
              printf("before call set(),the value of str is %d,value of *str is %c",(unsigned)str,*str);
              set(str);
              printf("after call set(),the value of str is %d,value of *str is %c",(unsigned)str,*str);
       }
      
       输出结果如下:
       before call set(),the value of str is 1245048,value of *str is A
       address of p is 0
       after call set(),the value of str is 1245048,value of *str is A
       由此可见,指针变量str的值在调用前后并没改变,所以它所指向的内容也不会变。
       在理解了这一点后,再回头看林锐博士的“c/c++高质量编程”中的一道题:
[align=left]       void GetMemory(char *p)[/align]
[align=left]       {[/align]
[align=left]              p = (char *)malloc(100);[/align]
[align=left]       }[/align]
[align=left]       void Test(void)[/align]
[align=left]       {[/align]
[align=left]              char *str = NULL;[/align]
[align=left]              GetMemory(str);[/align]
[align=left]              strcpy(str, "hello world");[/align]
[align=left]              printf(str);[/align]
[align=left]       }[/align]
[align=left]       问运行Test 函数会有什么样的结果?他给出的参考答案是程序崩溃。因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。[/align]
    在理解了指针变量是按值传递后,这道题目就会迎刃而解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c null 编程