指標的概念
指標的基本概念
每個變數都被存放在從某個記憶體位址(以位元組為單位)開始的若干個位元組
中「指標」,也稱作「指標變數」,大小為4個位元組(或8個位元組)的變數,
其內容代表乙個記憶體位址。
通過指標,能夠對該指標指向的記憶體區域進行讀寫。
如果把記憶體的每個位元組都想像成賓館的乙個房間,那麼記憶體位址相當於就
是房間號,而指標裡存放的,就是房間號。
5指標的定義
型別名 * 指標變數名;
int * p; // p 是乙個指標,變數 p的型別是 int *
char * pc; // pc 是乙個指標, 變數 pc 的型別是 char *
float *pf; // pf 是乙個指標,變數 pf 的型別是 float *
6指標的內容
int * p = ( int * ) 40000;
p內容:
十進位制 40000
十六進製制 0x9c40
二進位制每個位元 0000 0000 0000 0000 1001 1100 0100 0000
p指向位址40000,位址p就是位址40000
*p 就代表位址40000開始處的若干個位元組的內容
7通過指標訪問其指向的記憶體空間
int * p = ( int * ) 40000;
//往位址40000處起始的若干個位元組的記憶體空間裡寫入 5000
*p = 5000;
//將位址40000處起始的若干位元組的內容賦值給 n
int n = *p;
「若干」 = sizeof(int),因為 int * p;
8指標定義總結
t * p ; // t 可以是任何型別的名字,比如 int, double ,char 等等。
p 的型別: t *
*p 的型別: t
通過表示式 * p,可以讀寫從位址p開始的 sizeof(t)個位元組
*p 等價於存放在位址p處的乙個 t 型別的變數
兩個同型別的指標變數,可以比較大小
位址p1《位址p2, p1< p2 值為真。
位址p1=位址p2, p1== p2 值為真
位址p1>位址p2, p1 > p2 值為真
16指標的運算
兩個同型別的指標變數,可以相減
兩個t * 型別的指標 p1和p2
p1 – p2 = ( 位址p1 – 位址 p2 ) / sizeof(t)
17指標的運算
指標變數可以自增、自減
t* 型別的指標p指向位址n
p++, ++p : p指向 n + sizeof(t)
p–, --p : p指向 n - sizeof(t)
20指標的運算
5)指標可以用下標運算子「[ ]」進行運算
p 是乙個 t * 型別的指標,
n 是整數型別的變數或常量
p[n] 等價於 *(p+n)
21通過指標實現自由記憶體訪問
如何訪問int型變數 a 前面的那乙個位元組?
int a;
char * p = (char * ) &a; // &a是 int *型別
–p;printf("%c", * p); //可能導致執行錯誤
#include
using namespace std;
intmain()
23
空指標位址0不能訪問。指向位址0的指標就是空指標
可以用「null」關鍵字對任何型別的指標進行賦值。null實際上
就是整數0,值為null的指標就是空指標:
int * pn = null; char * pc = null; int * p2 = 0;
指標可以作為條件表示式使用。如果指標的值為null,則相當於為
假,值不為null,就相當於為真
if§ if(p!=null) if(!p) if( p==null )
24指標作為函式引數
#include
using namespace std;
void
swap
(int
*p1,
int* p2)
intmain()
指標和陣列
指標和陣列
陣列的名字是乙個指標常量
指向陣列的起始位址
t a[n];
a的型別是 t *
可以用a給乙個t * 型別的指標賦值
a是編譯時其值就確定了的常量,不能夠對a進行賦值
27指標和陣列
作為函式形參時, t *p 和 t p[ ] 等價
void func( int * p)
void func( int p)
28指標和陣列
#include
using namespace std;
intmain()
//29
指標和陣列
#include
using namespace std;
void
reverse
(int
* p,
int size)
}int
main()
;reverse
(a,sizeof
(a)/
sizeof
(int))
;for
(int i =
0;i <5;
++i)
return0;
}// => 5,4,3,2,1, 30
北京大學C語言學習第三天
字串1 所佔位元組數為 字元數加1 結尾有個 0,字串長度不包括 0。字串3種形式 1.雙引號括起來的 2.存放於陣列中的,以 0結尾 3.string物件 字串常量 空串 佔據乙個位元組空間,存放 0 包含 0 字元的一維陣列,就是乙個字串,存放的字串由 0 前的字元組成。char 陣列存放字串,...
北京大學C語言學習第一天
1.篩法求素數 include using namespace std define max num 100 char isprime max num 10 篩法求n以內素數 intmain for int i 2 i max num i if isprime i cout 2.陣列初始化 用陣列取...
北京大學機試題 整數奇偶排序 C
題目描述 time limit 1000 ms memory limit 256 mb 輸入10個整數,彼此以空格分隔。重新排序以後輸出 也按空格分隔 要求 1.先輸出其中的奇數,並按從大到小排列 2.然後輸出其中的偶數,並按從小到大排列。輸入輸出格式 輸入描述 任意排序的10個整數 0 100 彼...