每天學點C語言 4 指標與函式

2021-07-25 05:44:12 字數 2030 閱讀 9162

玩指標,玩指標,玩指標,玩指標,玩指標,玩指標。。。。。。。

然後就被指標玩了

引數傳遞到函式裡作為區域性變數,其改變一般並不會影響到原本的資料,因為實際上操作的是原資料的副本,而讓指標作為引數傳入函式,可以直接操作原資料,**如下:

#include 

#include "mm.c"

#include "swap.c"

void sw(int,int);

void pswap(int

*,int

*);int main()

#include 

void sw(int

x,int

y)

#include 

void pswap(int

*x, int

*y)

最後列印結果如圖:

第一種方法雖然在自己的域內互換了x,y的值,但從位址可以看出這裡的x、y和之前的資料並不是同一對,而第二種方法通過指標操作了原位址的資料,主函式的x、y也隨之而變

由於陣列的名字為第乙個元素的位址,所以傳遞引數為陣列的時候主函式中的陣列會隨著方法體中一起改變,但傳入的並不是整個陣列而是第乙個元素的位址,使用sizeof()可以看出,其引數大小一般為4位元組

指向函式的指標of course

#include 

int add(int,int);

intsub(int,int);

int cal(int (*p)(int,int),int,int); //int (*p)(int,int)即為函式指標

int main()

int cal(int (*p)(int,int),int

x,int

y)int add(int

x,int

y)int

sub(int x,int y)

結果如圖:

返回值為指標的函式,如:

#include 

char *getwords(char); //返回值為指向char型資料的指標

int main()

char *getwords(char c)

}

輸入對應字母便可列印出相應的單詞,這是通過指標函式的返回值獲取到資料位址,從而列印出對應的單詞

如果指標指向為函式自身的內部棧空間即為非法,如果資料的生命週期沒有函式長,那麼返回的位址就會無效

理想中的格式為:

int (*)(int,int) select(char)
但是編譯器會認為這是兩個函式而編譯報錯,正確格式為:

int (* select(char op))(int,int)
int (*fp)(int,int)
返回值為函式指標

下面是例子:

#include 

int add(int,int);

intsub(int,int);

int cal(int (*)(int,int),int,int);

int (* select(char))(int,int);

int main()

int add(int

x,int

y)int

sub(int x,int y)

int cal(int (*fp)(int,int),int

x,int

y)int (* select(char op))(int,int)

}

執行結果如圖:

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...

C語言學習4 指標

int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...

C語言總結4 指標上

指標的定義 type 資料型別 不知道指標指向 時可以置為null,沒有指向固定位置的指標為野指標 指標的大小在32位平台下是4位元組,在64位平台下是8位元組 includeint main 對指標加減1是加減上其所指向型別的大小 指標指向的都是首位址,所以加減一是加減型別所佔位元組數 指標的型別...