C語言學習筆記(五)指標

2021-10-05 08:23:59 字數 4260 閱讀 5919

(4)指標與陣列:為什麼陣列傳進函式後sizeof不對了?

(5)指標和const:指標本身和所指的變數都可能const

二、指標運算

scanf

("%d"

,&i)

;int i;

printf

("%p"

,&i)

;

int i;

int* p=

&i;int

* p,q;

int*p,q;

在函式裡面可以通過這個指標訪問外面的這個i

voidf(

int*p)

;int i =0;

f(&i);

int k=

*p;*p=k+

1;

a[0]

=2;*p=

3;

void

swap

(int

*pa,

int*pb)

void

minmax

(int a,

int len,

int*min,

int*max)

;int

main

(void);

int min,max;

minmax

(a,sizeof

(a)/

sizeof

(a[0])

,&max,

&min)

;printf

("min=%d,max=%d\n"

,min,max)

;return0;

}void

minmax

(int a,

int len,

int*min,

int*max)

if(a[i]

>

*max)

}}

但是當任何數值都是有效的可能結果時,就得分開返回了

int

divide

(int a,

int b,

int*result)

;int

main

(void

)return0;

}int

divide

(int a,

int b,

int*result)

return ret;

}

以下四種函式原型是等價的:

陣列變數本身表達位址,所以

運算子可以對陣列做,也可以對指標做

*運算可以對指標做,也可以對陣列做:

陣列變數是const的指標,所以不能被賦值

void

minmax

(int a,

int len,

int*min,

int*max)

;int

main

(void);

int min,max;

printf

("mian sizeof(a)=%lu\n"

,sizeof

(a))

;//結果是68

minmax

(a,sizeof

(a)/

sizeof

(a[0])

,&max,

&min)

;printf

("min=%d,max=%d\n"

,min,max)

;return0;

}void

minmax

(int a,

int len,

int*min,

int*max)

if(a[i]

>

*max)}}

//a是什麼?指標

void

minmax

(int

*a,int len,

int*min,

int*max)

;int

main

(void);

int min,max;

printf

("mian sizeof(a)=%lu\n"

,sizeof

(a))

;//結果是68

minmax

(a,sizeof

(a)/

sizeof

(a[0])

,&max,

&min)

;printf

("min=%d,max=%d\n"

,min,max)

;return0;

}void

minmax

(int

*a,int len,

int*min,

int*max)

if(a[i]

>

*max)

}}

所指是const

判斷哪個被const了的標誌是const在*前面還是後面

總是可以把乙個非const的值轉換成const的

voidf(

const

int* x)

;int a=15;

f(&a);

//ok

const

int b=a;f(

&b);

//ok

b =a +1;

//error!

保護數組織

如果指標不是指向一片連續分配的空間,如陣列,則這種運算沒有意義

這些算術運算可以對指標做:

*p++

int

main

(void);

char

*p=ac;

printf

("p =%p\n"

,p);

printf

("p+1 =%p\n"

,p+1);

int ai=

;char

*q=ai;

printf

("p =%p\n"

,p);

printf

("p+1 =%p\n"

,p+1);

return

0;

0位址

null是乙個預定定義的符號,表示0位址

指標的型別

指標的型別轉換

指標也可以轉換型別

這並沒有改變p所指的變數的型別,而是讓後人用不同的眼光通過p看它所指的變數

用指標來做什麼?

動態申請的記憶體…

malloc函式

//如果是c99

#include

#include

intmain

(void

)//如果不是c99

#include

#include

intmain

(void

)for

(i=number-

1;i>=

0;i--

)free

(a);

return0;

}

#include

#include

intmain

(void

)printf

("分配了%d00mb的空間\n",cnt)

;return0;

}

//錯誤示範1

#include

#include

intmain

(void

)//錯誤示範2

#include

#include

intmain

(void

)//好習慣

//錯誤示範1

#include

#include

intmain

(void

)

C語言學習筆記(五)指標

指標格式 變數型別 變數名 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 一 指標變數的定義 1.格式 變數型別 指標變數名 2.舉例 int p char p2 3.注意 定義變數時的 僅僅是指標變數的象徵 二 利用...

C語言學習(五)指標

int main int i 定義整型變數 int 為指向整型資料的指標變數 inta n 定義整型陣列 它有 個元素 int 定義指標陣列 它由 個指向整型資料的指標元素組成 int p為指向含n個元素的一維陣列的指標變數 int f 為帶回整型函式值的函式 int 為帶回乙個指標的函式,該指標指...

C語言學習入門 五 指標

chara a 10 程式內部是怎麼操作的呢?其實,程式對變數的讀寫操作,實際上是對變數所在的儲存空間進行寫入或取出資料。就上面的 而言,系統會自動將變數名a轉換為變數的儲存位址,根據位址找到變數a的儲存空間,然後再將資料10以2進製的形式放入變數a的儲存空間中。通過變數名引用變數,由系統自動完成變...