您的位置:首页 > 其它

函数参数调用指针、结构体

2017-02-23 15:41 197 查看
一、函数调用指针时

void main(void)

{

int a,int b;

a=5;

b=3;

fun(&a,&b);

}

void fun(*p1,*p2)

{

int c;

c=*p1;

*p1=*p2;

*p2=c;

}

1、此时函数声明参数是两个指针,因此主函数中函数的调用参数应该输入两个指针,就是a,b的地址。

2、再次强调,需要改变输入参数的值时函数才需要调用该指针,就是说fun(x,y) fun(结构1),需要改变调用参数的值时,该参数采用指针表示(此处指想要改变的是普通变量,而不是改变指针变量)

二、函数调用结构体

1、结构体、实例、指向结构的指针

结构体的实例相当于一个变量,让指针指向该结构体的实例时可以这么写

sturct stu{

char names;

};

sturct stu *p1; 申明了指向该结构的指针p1,但是该指针并未初始化,还不能使用

struct stu s1;

p1=&s1; 创建了实例后就可以让指针指向实例了

或者

struct stu{

char name;

};

struct stu *p1;

p1=(stu*)malloc(sizeof(struct stu)); 此处给指针分配空间,最后记得free

2、函数调用

定义时

void fun(stu *p1,stu p2)

main中 stu s1,s2; 创建两个实例

调用时fun(&s1,s2)

这里有个重点,为啥同样是实例,两个申明时一个是申明指针,一个就是申明实例呢?答案和本文第一部分函数调用指针参数一样,只有在想改变参数的值时才将参数设为指针类型,否则就是本来的类型。比如实例s1,我的函数f1想要在s1中插入值,就更改了s1,就要申明f1(*s1);我的函数f2想要把s1中的值读出来,不更改s2,就不需要指针作为参数,就是f2(s1).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 结构 指针