C語言之指標基礎

2021-09-11 20:54:50 字數 2605 閱讀 1185

傳值呼叫和傳址呼叫:

**實踐:

常量與指標(const修飾指標):

指標小結:

我們先提出乙個問題:既然程式中的變數只是一段儲存空間的別名,那麼是不是必須通過這個別名才能使用這段儲存空間?

#include

#include

intmain()

問題的答案很顯然,不是,可以通過指標來使用這段儲存空間。

指標在本質上也是乙個變數

指標需要占用一定的記憶體空間

指標用於儲存記憶體位址的值

在32位pc機上,指標占用的記憶體為4個位元組。(為什麼是4個位元組哪?指標需要具備儲存任意乙個位址的能力。)

在指標宣告時,*號表示所宣告的變數為指標;

在指標使用時,*號表示取指標所指向的記憶體空間中的值。

//指標宣告:

int i = 0;

int j = 1;

int* p = &i;

//取值

j = *p;

指標在記憶體中圖示:

* p就是:從0xaabbccd0的位址開始,取4個位元組的長度(int* p)。

#include

#include

intmain()

執行結果:

我們將上述**在windows系統上執行(本處使用devcpp的ide),多執行幾次,可以發現:

第一次執行:

連續執行多次,我們可以發現:int i變數的位址都為0x62fe44,我們現在利用windows系統的這一特性做乙個黑客操作(放開 注釋①)。

執行結果:

指標是變數,因此可以宣告指標引數

當乙個函式體內部需要改變實參的值,則需要使用指標引數

函式呼叫時實參值將複製到形參

指標適用於複雜資料型別作為引數的函式中

#include #include struct test

;void f(struct test t) //傳值:copy 2000*4 個位元組

int main()

#include #include struct test

;void f(struct test* t) //傳址:

int main()

通過巨集:

#include #include #define swap(a,b)  //巨集是直接展開

int main()

實現了交換的功能

寫swap函式:(傳值呼叫)

#include #include void swap(int a, int b)

int main()

執行結果:

沒有實現了交換的功能

寫swap函式:傳址呼叫

#include #include void swap(int* a, int* b)

int main()

執行結果:

實現了交換的功能

const int* p; //p可變,p指向的內容不可變

int const* p; //p可變,p指向的內容不可變

int* const p; //p不可變,p指向的內容可變

const int* const p; //p和p指向的內容都不可變

口訣:當const出現在 * 號左邊時指標指向的資料為常量

當const出現在 * 後右邊時指標本身為常量

指標是c語言中一種特別的變數

指標所儲存的值是記憶體的位址

可以通過指標修改記憶體中的任意位址內容

圖示:

C語言之指標

指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...

C語言之指標

指標的概念 什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。指標變數的定義 int p 該變數用來存放乙個空間的位址。p 代表該指標指所指向記憶體空間中的值,切記指標只能存放有效的記憶體空間位址,不能存放其...

C語言之指標

指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...