C語言 C 指標知識點總結詳解

2021-09-25 05:22:40 字數 3048 閱讀 8880

如果把某一塊已經開闢的記憶體空間比作房間,那麼指標就是一把鑰匙。房間有大有小,而鑰匙就那麼大,所以指標所占用的位元組為4位元組。這把鑰匙可以根據你的設定來讓它開哪個房間,但是,最多只能開乙個房間。

1、定義

我們平常見到的定義指標有兩種寫法:int *pint* p,其實這兩種寫法效果是一樣的,但是為了避免混淆,建議採用第一種int *p,因為如果你同時定義了乙個指標變數和乙個普通變數,如:int* p,a;你可能以為定義了兩個指標p和a,所以採用第一種能避免混淆。

2、賦值

賦值方式有兩種

定義時賦初值:int a; int *p=&a

先定義,後賦初值:int a; int *p; p=&a

3、陣列首位址賦給指標

&作為取位址符,*是取值符,如果指標指向的是單個變數,直接用 *將p指向位址的值取出即可:cout<<*p《一般呼叫函式傳參都是值傳遞,如果函式引數時指標的話,那麼呼叫函式時就得將相應位址傳過去,所以函式執行過程中進行的一系列操作也是對位址進行的操作,也就改變了實參的值。常見的位址傳遞有:

(1)傳遞陣列名進行排序mysort(arr,len)

(2)排序過程中兩個數交換swap(&arr[i],&arr[j])

在c語言中,乙個字串常量不可以直接賦給乙個陣列,比如:char s[10]; s="hello";這種寫法是錯誤的。但是乙個字串卻可以直接賦給乙個指標:char *p; p="hello";這僅限於將乙個字串常量的位址賦給指標p,但如果char s[10]; char *p=s; *p="hello";這就是非法的,這就相當於直接把字串常量賦給乙個陣列,其實字串常量賦給乙個陣列可以採用strcpy()函式。

函式的返回值也可以是指標型別,前提是這個指標指向的內存在函式呼叫後不會被銷毀,在這裡不做過多說明。

例如:

int a=10;

int*p=

&a;//取a的位址傳給p

int*

(*pp)

=&p;

//取p的位址傳給pp

//如何引用:

cout

*p

*pp)

const修飾常變數,如何理解?例如:const int a=10;這就定義了乙個常變數a,a的值不可修改。

再論指標,指標有兩個東西可變:

int a=10; int *p=&a;

1、指標指向的位址裡面存放的值可變*p=5; //a的值變為5

2、指向的指向可變int b=10; p=&b; //p的指向被改為a;

因此,const在不同地方修飾就有不同的效果

如:(1)int a=10; const int *p = &a;

此時const修飾int,代表*p的值不可改變,也就是p指向的值不可以改變,但p的指向可以改;

(2)int a=10; int const *p = &a;

此時const修飾p,代表p的指向不可改變,但p的值可以改變。

(3)int a=10; const int* const p=&a;

由此類推此時p的指向和p指向的值都不可改變

void代表空,大家就很疑惑為什麼指標還有空型別,有人可能以為void型別指標可以指向任何型別的資料,這種理解是錯誤的。應該理解為「指向空型別」或「不指向確定型別」的資料,那麼如何指向空型別呢?舉個例子:

int a=3;

int*p1=

&a;void

*p2=

(void

*)p1;

// 這一句就是將乙個指向int型別的指標轉化為空型別指標然後賦給p2;

cout<<

(int

*)p2

變數定義

型別表示

含義int i;

int定義為整型變數i

int *p;

int *

定義p為指向整型資料的指標

int a[5];

int [5]

定義乙個整型陣列

int *p[4];

int *[4];定義乙個指向整型資料的指標資料

int (*p)[4]

int (*)[4]

定義乙個包含4個元素的一維陣列指標變數

int f();

int ()

定義乙個函式,返回值是整型

int *p()

int *()

定義乙個返回值為整型指標的函式

int (*p)();

int (*)()

定義乙個指向返回值為int型別的函式

int **p;

int **

定義乙個指向【指向整型的指標】的指標

int const *p;

int const *

定義乙個指向不可修改的指標

const int *p;

const int *

定義乙個指向的值不可修改的指標

const int* const p;

const int * const

定義乙個指向和指向的值都不可修改的指標

void *p;

void *

定義乙個空型別指標

大家如果將這些全部弄清楚指標這塊就差不多可以了 ^ _ ^

C語言指標關鍵知識點總結

三 指標對比 四 空指標null與nul以及void指標 在我們目前所學到的語法中,星號主要有三種用途 如果乙個指標指向了陣列,我們就稱它為陣列指標 array pointer 重點 陣列名是常量,它的值不能改變,而陣列指標是變數 除非特別指明它是常量 它的值可以任意改變。也就是說,陣列名只能指向陣...

C語言知識點總結

有段事件沒有寫c程式了,有些地方有些生疏了。這兩天事情比較少,準備再系統的看一邊c的基礎知識。這裡再總結一下平時沒太注意的知識要點。1 c語言的語句塊在c語言中,任何允許出現語句的地方既可以是由 號結尾的一條語句,也可以是由 括起來的若干條語句或宣告組成的語句塊 statement block 語句...

C語言知識點總結

以下內容為本人對c語言中經常忘記但是又重要的知識點的總結。i,i 在使用i之前,先使i的值加 減 1 i i 在使用i之後,使i的值加 減 1 continue 結束本次迴圈語句 break 中止執行switch或迴圈語句 if語句常用的三種形式 while迴圈,for迴圈,do while迴圈都可...