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

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

c/c++培訓C語言核心知識總結(三、四)

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

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

1) int * const p;
指針常量:p 是 int*類型,那么const修飾的是p,所以p是常量,表示p指向的地址不可修改,
也就是說,p不能再指向別的地方了,但是可以修改p指向的這個地址里的值。
舉例:
int a = 10;
int b = 20;
int * const p = &a;
p = &b; // 錯誤
*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; // 錯誤
 
3) const int * const p;
常量指針常量:p 是 int*類型,那么const分別修飾了p 和 *p, 所以p和*p都是常量,表示p指向的地址不可修改,
同時p指向的地址里的值也不可修改。
int a = 10;
int b = 20;
const int *const p = &a;
p = &b; // 錯誤
*p = 100; // 錯誤
 
《C Primer Plus》 : "自由的代價,是永遠的警惕。"
你定義了一個指針,那就一定要知道這個指針指向的什么地方,而且你要保證這個指針是真實有效的,否則我就用程序崩潰來懲罰你。
 
 
四、多級指針
 
#include <stdio.h>
int main(void)
{
int a = 10;
int *p = &a; // 定義一個一級指針變量,存儲了整型變量a的地址
int **pp = &p; // 定義一個二級指針變量,存儲了整型一級指針變量p的地址
int ***ppp = &pp; // 定義了一個三級指針變量,存儲了整型二級指針變量pp的地址
 
printf("%p, %p, %p, %p\n", &a, &p, &pp, &ppp);
// 分別打印各個變量自身所在的內存地址
 
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
}
本文版權歸傳智播客C++培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓學院
首發(fā):http://m.fskzgqt.cn/c/ 
0 分享到:
和我們在線交談!