教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

c/c++培訓(xùn)C語言核心知識(shí)總結(jié)(三、四)

更新時(shí)間:2016年10月21日16時(shí)32分 來源:傳智播客C++培訓(xùn)學(xué)院 瀏覽次數(shù):

三、一級(jí)指針
1. 指針的使用: 32位系統(tǒng)下是 4 個(gè)字節(jié),64位系統(tǒng)下是 8 個(gè)字節(jié)
 
1) 在定義的時(shí)候用 * 號(hào),代表這個(gè)變量那個(gè)是指針類型
int a = 10; // 定義一個(gè)整型變量,存儲(chǔ)整數(shù) 10
int *p = &a; // 定義一個(gè)整型指針變量,存儲(chǔ)a的地址
 
2) 在配合表達(dá)式使用 * 號(hào),代表取值運(yùn)算符,可以取出這個(gè)地址里的值
printf("%d\n", *p); // 打印p指向的地址里的值
printf("%d\n", *(&a)); // 打印a這個(gè)地址里的值
printf("%d\n", *p + 1); // 取出值,再加1打印出來
 
 
2. 指針的幾種特殊定義方式:

1) int * const p;
指針常量:p 是 int*類型,那么const修飾的是p,所以p是常量,表示p指向的地址不可修改,
也就是說,p不能再指向別的地方了,但是可以修改p指向的這個(gè)地址里的值。
舉例:
int a = 10;
int b = 20;
int * const p = &a;
p = &b; // 錯(cuò)誤
*p = 100; // 允許
 
2)  const int *p;
int const *p;
常量指針:p 是 int*類型,那么const修飾的是*p,所以*p是常量,表示p指向的地址里的值不可修改,
也就是說,p里的值不能再重新賦值了,但是可以修改p指向的地址。
int a = 10;
int b = 20;
const int *p = &a;
p = &b; // 可以
*p = 100; // 錯(cuò)誤
 
3) const int * const p;
常量指針常量:p 是 int*類型,那么const分別修飾了p 和 *p, 所以p和*p都是常量,表示p指向的地址不可修改,
同時(shí)p指向的地址里的值也不可修改。
int a = 10;
int b = 20;
const int *const p = &a;
p = &b; // 錯(cuò)誤
*p = 100; // 錯(cuò)誤
 
《C Primer Plus》 : "自由的代價(jià),是永遠(yuǎn)的警惕。"
你定義了一個(gè)指針,那就一定要知道這個(gè)指針指向的什么地方,而且你要保證這個(gè)指針是真實(shí)有效的,否則我就用程序崩潰來懲罰你。
 
 
四、多級(jí)指針
 
#include <stdio.h>
int main(void)
{
int a = 10;
int *p = &a; // 定義一個(gè)一級(jí)指針變量,存儲(chǔ)了整型變量a的地址
int **pp = &p; // 定義一個(gè)二級(jí)指針變量,存儲(chǔ)了整型一級(jí)指針變量p的地址
int ***ppp = &pp; // 定義了一個(gè)三級(jí)指針變量,存儲(chǔ)了整型二級(jí)指針變量pp的地址
 
printf("%p, %p, %p, %p\n", &a, &p, &pp, &ppp);
// 分別打印各個(gè)變量自身所在的內(nèi)存地址
 
printf("%p, %p, %p, %p\n", &a, p, pp, ppp);
//printf("%d", a);  用%d的形式打印a的值:整數(shù)
//printf("%p", p);  用%p的形式打印p的值:地址
// &a : 打印 變量 a 的地址
// p: 打印變量 a的地址
// pp: 打印變量 p 的地址
// PPP:打印變量 pp 的地址
 
printf("%p, %p, %p, %p\n", &a, p, *pp, **ppp);
// &a : 打印 變量 a 的地址
// p: 打印變量 a 的地址
// *pp:打印變量 a 的地址
//**PPP: 打印變量 a 的地址
 
printf("%d, %d, %d, %d\n", a, *p, **pp, ***ppp);
// a: 打印 10
// *P: 打印 10
// **pp:打印 10
// ***ppp: 打印 10
}
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://www.xamj520.com/c/ 
0 分享到:
和我們在線交談!