字串中的數字要進行運算,首先要 -『0』 操作轉化成數字型別,然後運算,最後 +『0』 轉回字串。
指標就是位址;
位址就是一塊記憶體的起始位址。
訪問:讀取或修改記憶體單元。
char buf[30]
=;int*p=buf;
//錯誤
char
*p=buf;
//正確
int*p=
(int
*)buf;
//正確
對於位址,32位作業系統位址大小是4個位元組,64位是8個位元組。
32位作業系統每個程序都4gb的虛擬記憶體(但能訪問的記憶體非常有限)。
訪問非法位址的記憶體就會出現段錯誤,
eg:
1.
int*p;
*p;//此時p指向隨機位址,極大概率為非法位址(野指標,懸掛指標)
2.int a=10;
scanf
("%d"
,a);
修改唯讀常量會出現段錯誤:
eg:
char
*p="1234"
;*p=
'2';
//錯,修改唯讀常量
strcpy
(p,"1234");
//錯
int a;
int*p;
p=&a;
//表示a的位址
int*p2;
*p2=
&*p; 等價於 *p2=p;
*p++ 等價於 *
(p++
)//*的結合方向自右向左
形參**現 int a 實際上a是指標變數,而非陣列。
以下在陣列中才有意義:
位址[n] == *(位址+n)
位址++ : 指向陣列的下乙個元素
位址+n ; 指向陣列往後第n個元素
位址1-位址2 : 相差元素個數
位址1+位址2(無意義)
14.函式 傳入引數
(1)用於資料輸入(既可按值傳遞,也可按位址傳遞)
(2)用於資料輸出
(3)既用於資料輸入,也用於資料輸出
eg;
char
*strcpy
(char
*dest,
const
char
*src)
//src用於資料輸入,dest用於資料輸出
void
memcpy
(void
*dest,
const
void
*src,size_tn)
//void *p可以指向任何型別的元素
//p不能用*解引用符
//p一般不可以做運算,如果有編譯器可以,則++表示便宜乙個位元組
15.假若乙個函式可以有多個返回值,但return只能返回乙個輸出值
eg:
#include
#include
#include
intfun
(int
*a,int
*b,int
*c)else
*c+=a[i];}
return n;
}int
main()
n=fun(a,
&b,&c)
;for
(i=0
;i<
10;i++
)printf
("\n奇數和:%d\n偶數和:%d\n奇數個數:%d\n偶數個數:%d\n"
,b,c,n,
10-n)
;return0;
}
二級指標指向的是乙個一級指標。
陣列指標
int
main()
指標陣列:表示陣列裡每乙個元素都是指標。
字串指標:
char
*p="1234";p=
"5678"
;//字串指標
char buf=
"1234"
;buf=
"5678"
;//錯誤,buf為常量,不能給其賦值
函式不能返回區域性變數位址。
宣告幾個指標變數去遍歷二維陣列
for
(p=a;p3;p++
)printf
("\n");
}
今天學習的主要內容是指標,確實不簡單,彎彎繞繞,很容易把人弄迷糊。一整天下來也有所收穫,之前指標部分學習的太少了,今天差不多是從零開始,課後繼續查缺補漏吧。不能掉隊,後邊還有更大的挑戰。 C語言知識點梳理 1
include int main 這是主函式。當程式執行時main函式是起始函式,程式的起點。int為函式的返回值型別,括號中的內容為函式的引數,這裡主函式沒有引數,所以括號中沒有內容,在自定義函式中如果需要引數則需要在括號中依次定義引數的型別和引數名 如 int pow int int a,int...
c語言常用知識點梳理
c語言常用知識點 知識點1 交換兩個變數值的方法 如下 b a b a a b b a b 採用按位異或的位方式 如下 a a b b a b a a b 知識點2 p 3 與 p 3 的區別 因為的優先順序高於 所以結合順序不一樣,所表示的含義也不一樣。知識點3 sizeof的使用 知識點4 in...
C語言知識點梳理感悟
c語言知識點梳理感悟 一,知識點梳理 1.預處理 1 預處理指令 2 開頭的指令都被稱為預處理指令 3 預處理的作用 4 檢視預處理後的結果 5 include 裡加庫函式 2.資料 1 常量 2 巨集,巨集定義,巨集的使用,巨集的缺陷 3 變數,變數的型別,變數的賦值,變數的初始化,乙個 是賦值。...