c語言作為入門語言,開啟了我的網際網路的大門,學習的各個科目,使用過不同語言,但總的來說還是c使用頻率最高。
故花兩天時間溫習一下譚浩強的書。
從新整理一些零碎的知識。
位元組=byte=b=8bit
位=bit=b
|| 或
&& 與
! 非d、i:
以帶符號的十進位制輸出整數以帶符號的十進位制輸出整數
c:
以字元形式輸出,只輸出乙個字元。以字元形式輸出,只輸出乙個字元。
s:
輸出字串
f:
以小數形式輸出,雙精度數
continue意為結束本次迴圈,進行下一次迴圈
break則為結束迴圈體,執行下乙個語句。
a&&b
如果a為假,則不執行b。
a||b
如果a為真,則不執行b
指標變數的定義及初始化:
如初始化乙個指標:
int *a=&m;
或者:int *a;
a=&m;
星號的出現,大部分指指標變數所指的值,但卻有特殊情況。
1.代表所指向的變數的值
a=&m;
printf("%d",*a);
此時*a就表示m的值
2.僅說明該變數為指標變數
int *a;
void swap(int *a,int *b)
在定義、函式形參定義這兩種情況下,此時int *a中的 *只是說明該變數為指標變數。
以前函式形參定義的時候總是迷糊,如
int max(int *a,int *b);
int *p1=&a,*p2=&b;
int c;
c=max(p1,p2);
以前會覺得函式swap的形參為指標所指向的值,導致呼叫的時候寫
c=max(*p1,*p2)
其實swap的形參只是指標,故呼叫的時候填入指標就行了。
函式定義時
void swap(int arr)和void swap(int *arr)等價
呼叫的時候
int a[10]=;
swap(a);
a代表a[0]的位址,故直接填入陣列名即可。此函式中對形參的操作會影響實參的值(見七)
3.多維陣列下的星號
int a[3][4]=,,};
a為二維陣列名,此時不再指代a[0][0]的位址,而是指代第一行的位址。
即a+1指代第二行的位址。
在一維陣列中,*(a+1)指a[1],而一維陣列中a[1]是陣列中的第二個值。
而二維陣列中,* (a+1) 指a[1],而二維陣列中a[1]不再代表乙個值,而是代表位址,故*(a+1)不再代表值,而是代表位址。
故多維陣列下,只有乙個*的情況下,代表位址,兩個*,代表值
即a[1]+2與*(a+1)+2與&a[1][2]等價
*(a[1]+2) 與*(*(a+1)+2)與 a[1][2]等價
1(不變).若
void swap(int c,int d);//交換c,d值
int a=1,b=2;
swap(a,b);
此時a,b的值並不會交換,可以理解為把實參a,b的值給了c和d,他兩怎麼造作是他兩的事,與a,b無關。
2(不變).若
int *point1=&a,*point2=&b;
swap(point1,point2);
void swap(int *p1,int*p2)
此時將point1和point2的指向位址交換了,故point1不再指向a,而是指向b,故a,b的值仍未改變,*point1的值卻變成了b的值。
3(變).若
int *point1=&a,*point2=&b;
swap(point1,point2);
void swap(int *p1,int *p2)
此時改變的是指標指向變數的值,即point1還是指向a,但a的值改變為原b的值了。 C語言基礎 指標基礎
最小儲存單位 bit 即 0 1 基本儲存單位 byte 1byte 8bit 注 計算機訪問的資料是byte位數定義變數 分配儲存空間 引用變數 通過變數名引用變數的內容即變數空間的首位址 為常量,即 變數名 專門儲存位址常量的變數型別 變數名所有指標變數均分配4byte的儲存空間 與其他變數相同...
C語言指標總結
2012 03 07 07 22 標籤 c語言 分類 pointer c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一...
C語言指標總結
c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一步一步分析.int p 這是乙個普通的整型變數 int p 首先從 p...