| 
 | 
 
1鱼币 
第一道 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
typedef struct stu{ 
        char *name,gender; 
        int score; 
}STU; 
void f(char *p) 
{ 
        p=(char *)malloc(10); 
        strcpy(p,"Qian"); 
} 
main() 
{ 
        STU a={NULL,'m',290},b; 
        a.name=(char *)malloc(10); 
        strcpy(a.name,"Zhao"); 
        b=a; 
        f(b.name); 
        b.gender='f';b.score=350; 
        printf("%s,%c,%d,",a.name,a.gender,a.score); 
        printf("%s,%c,%d\n",b.name,b.gender,b.score); 
} 
第二道 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
typedef struct stu{ 
        char name[10],gender; 
        int score; 
}STU; 
void f(char *p) 
{ 
        strcpy(p,"Qian"); 
} 
main() 
{ 
        STU a={"Zhao",'m',290},b; 
        b=a; 
        f(b.name); 
        b.gender='f';b.score=350; 
        printf("%s,%c,%d,",a.name,a.gender,a.score); 
        printf("%s,%c,%d\n",b.name,b.gender,b.score); 
} 
能不能具体说一下这里面的值传递和址传递到底是怎么进行的?? 
谢谢了! 
 
 |   
 
 
最佳答案
查看完整内容 
很简单。开启调试器,你会发现,如果是立即数值传递,他居然有地址。本来你明明传给他的是一个常量一个确定的数值比如f(1,2...)为什么会有地址呢?很简单,你看,你定义一个函数是不是    
函数类型   函数名(参数列表){。。。。。。},其中参数列表是不是都是些 int template啊double template啊什么的,你觉得这像什么,是不是想你普通的定义一个变量,所以他的意思就是定义一个变量,只不过是临时的(template)。所以你传递给 ... 
 
 
 
 
 
 
 |