(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的儲存空間中。通過變數名引用變數,由系統自動完成變...