C語言學習筆記

2021-10-23 10:29:15 字數 2308 閱讀 4389

指標的存在就是為了間接訪問

1.1 指標變數的兩種型別

自身的型別和指向的型別

例: int * p = null;

自身的型別:在指標變數定義的時候,將變數名拿掉(即p),剩下 int * ,這就是指標變數的型別;

指向的型別:在指標變數定義的時候,將變數名和距離最近的*拿掉(即 *p),剩下(int )就表示p指向的型別是int .

指標變數指向型別的作用:決定了指標變數所取內容的寬度,即指標變數+1 跳過的單位跨度。

1.2指標的定義

1).先定義再賦值

int a =12;

int*p;

p =&a;

2).定義的同時賦值

int a =12;

int*p =

&a;

1.3 指標的++運算

*p++ , * 和++ 的優先順序相同,但++ 後置,所以先輸出,後加一,實際使用與 i++類似。

int a[5]

=;int*p =

&a[0];

printf (

"*p = %u\n"

,*p++);

//*p ,p=p+1 ,即: 先輸出a[0]後,再指標加一

實際輸出:

*p = 111
*++p,先指標加一,即輸出a[1]

int a[5]

=;int*p =

&a[0];

printf (

"*p = %u\n",*

++p)

;//*(p+1) ,即:先指標加一,後輸出a[1],

實際輸出:

*p = 222
2.1 實現兩個數的交換

(1) 不使用指標,使用實參f發現不能進行交換

# include

int main (

void

)int

swap

(x,y)

執行結果如下:

before swap a = 12 , b = 34

after swap a = 12 , b = 34

(2)使用指標傳參實現交換

# include

int main (

void

)int

swap_pointer

(int

*p1,

int*p2)

執行結果如下:

before swap a = 12 , b = 34

after swap a = 34 , b = 12

(3)使用結構體傳參實現交換

#include

void

swap

(int

*p1,

int*p2)

;struct mystruct

;int

main

(void);

printf

("before swap : a = %d b = %d.\n"

,num.a,num.b)

;struct mystruct *p;

p =#

swap(&

(p->a),&

(p->b));

printf

("after swap : a = %d b = %d.\n"

,p->a,p->b)

;return0;

}void

swap

(int

*p1,

int*p2)

執行結果

before swap : a = 3 	b = 5.

after swap : a = 5 b = 3.

總結

當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製乙份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。

對於程式(1)我們發現實參的內容沒有被改變。

特別注意:在使用指標傳參時,不要在函式裡改變指標的位址,否則就會導致傳參的不成功。

持續更新中…

C語言學習筆記

include include void swap int p1,int p2 void swapa int arr,int n void printfa int arr,int n int main int argc,char argv swap i,j printfa array,6 swapa...

C語言學習筆記

file 結構 包含在stdio.h裡 ifndef file defined struct iobuf typedef struct iobuf file define file defined endif fread 功 能 從乙個流中讀資料 函式原型 size t fread void buf...

C語言學習筆記

我們學習c語言最開始入門的時候,都是先從c語言學習 c語言教材書籍開始學習,這些是我摘要的一些內容。第一章 c 語言概述 語言概述 1.1 物件導向程式設計基本概念 1.2 c 語言是一種物件導向的程式設計 語言 1.3 c 程式結構的特點 程式結構的特點 1.4 visual c 6.0簡介 簡介...