1. 程式人生 > >函式引數呼叫指標、結構體

函式引數呼叫指標、結構體

一、函式呼叫指標時
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).