北京大學C語言學習第4天

2021-10-05 02:48:40 字數 2876 閱讀 6889

指標的概念

指標的基本概念

每個變數都被存放在從某個記憶體位址(以位元組為單位)開始的若干個位元組

中「指標」,也稱作「指標變數」,大小為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 彼...