C 指標的定義和指標的運算

2021-09-27 06:24:43 字數 1384 閱讀 2831

一談起指標,會不會有人跟我一樣感到有些害怕?。

最開始在學習c語言時,剛接觸指標,讓我感覺很頭大,感覺沒能很深入的理解。在重新學習理解了之後,寫了這篇部落格。

指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」,意思是通過它能找到以它為位址的記憶體單元。

要理解指標需要從四個方面理解,指標的型別、指標指向的型別、指標所指向的記憶體區、指標本身所佔據的記憶體區。

指標是用來存放位址的,位址是唯一標示一塊位址空間的。

指標 ± 整數

int main()

&n和pc,以及pi的位址為相同的

在上例中,指標pc的型別是char*,它指向的型別是char,被初始化為指向字元變數的n

而對pc+1之後,把pc指標的值加上了sizeof(char),在32位平台下加1,由於位址是用位元組做單位的,故pc所指向的位址由原來的變數n 的位址向高位址方向增加了1個位元組

而指標pi的型別為int*,它指向的型別是int,pi+1是把指標的值加上了sizeof(int),在32位平台下加4,故pi所指向的位址由原來的變數n 的位址向高位址方向增加了4個位元組

指標 - 指標

int my_strlen(char *s)

用乙個臨時變數p,起始位置與s相同,遍歷一遍,找到末尾減去起始位置,便是字串長度

注:兩個指標不能進行加法運算,這是非法操作,因為進行加法後,得到的結果指向乙個不知所向的地方,而且毫無意義。兩個指標可以進行減法操作,但必須型別相同,一般用在陣列方面。

指標的關係運算

#define num 5

float values[num];

float *vp;

//指標+-整數

//將大小為5的float陣列初始化為0

for (vp = &values[0]; vp < &values[num]; vp++)

for(vp = &values[n_values-1]; vp >= &values[0]; vp--)

上面的兩個例子都是能夠實現將陣列內容全部賦值為0

首先解引用&:

指標的型別決定了,對指標解引用的時候有多大的許可權(能操作幾個位元組)。

比如: char* 的指標解引用 就只能訪問乙個位元組,而 int* 的指標的解引用就能訪問四個位元組。

其次要想要很好的理解指標,就必須很理解指標的四個方面,指標的型別、指標指向的型別、指標所指向的記憶體區、指標本身所佔據的記憶體區。

C和指標 指標運算(指標加法 指標減法)

計算間隔的位元組數 除以權重 以指標加數字為例 指標減數字類似 int p1 p1 加的值為sizeof int 即加4位元組 p1 3 加3個單元格,p1為int型4位元組,即加12個位元組 short p2 p2 加sizeof short 加2位元組 是不是懂了呢?接下來多來點例子看看吧。我們...

C語言指標 指標的運算

include int main void 執行這段 會出現錯誤嗎?如果出現錯誤,是什麼錯誤?分析 printf一種常規的用法就是printf please input a data 這種用法相信很多人都使用過,但是將這種用法分析一下,這樣的用法printf函式接收到的引數是乙個常量字串的首位址,然...

C 指標的運算

一 取位址運算 與取內容運算 單目運算 是取操作物件的位址 是取指標指向的物件的內容 兩者互為逆運算 int x p p x p p 表示指標 x x 表示變數x 二 指標的算術運算 指標的運算與其基型別有關 一般的,如果p是乙個指標 n是乙個正整數 則對指標 p 進行 操作後的實際位址是 p n ...