第二章 指標的算術運算

2022-02-08 07:03:33 字數 1676 閱讀 2266

指標可以加上或減去乙個整數。指標的這種運算的意義和通常的數值的加減

運算的意義是不一樣的。例如:

例二:

1。   char a[20];

2。   int *ptr=a;

...

...

3。   ptr++;

在上例中,指標ptr的型別是int*,它指向的型別是int,它被初始化為指向整

形變數a。接下來的第3句中,指標ptr被加了1,編譯器是這樣處理的:它把指標

ptr的值加上了sizeof(int),在32位程式中,是被加上了4。由於位址是用位元組做

單位的,故ptr所指向的位址由原來的變數a的位址向高位址方向增加了4個位元組。

由於char型別的長度是乙個位元組,所以,原來ptr是指向陣列a的第0號單元開始的

四個位元組,此時指向了陣列a中從第4號單元開始的四個位元組。

我們可以用乙個指標和乙個迴圈來遍歷乙個陣列,看例子:

例三:

int array[20];

int *ptr=array;

...

//此處略去為整型陣列賦值的**。

...

for(i=0;i<20;i++)

這個例子將整型陣列中各個單元的值加1。由於每次迴圈都將指標ptr加1,所

以每次迴圈都能訪問陣列的下乙個單元。

再看例子:

例四:

1。 char a[20];

2。 int *ptr=a;

...

...

3。 ptr+=5;

在這個例子中,ptr被加上了5,編譯器是這樣處理的:將指標ptr的值加上5

乘sizeof(int),在32位程式中就是加上了5乘4=20。由於位址的單位是位元組,故

現在的ptr所指向的位址比起加5後的ptr所指向的位址來說,向高位址方向移動了

20個位元組。在這個例子中,沒加5前的ptr指向陣列a的第0號單元開始的四個位元組

,加5後,ptr已經指向了陣列a的合法範圍之外了。雖然這種情況在應用上會出問

題,但在語法上卻是可以的。這也體現出了指標的靈活性。

如果上例中,ptr是被減去5,那麼處理過程大同小異,只不過ptr的值是被減

去5乘sizeof(int),新的ptr指向的位址將比原來的ptr所指向的位址向低位址方

向移動了20個位元組。

總結一下,乙個指標ptrold加上乙個整數n後,結果是乙個新的指標ptrnew,

ptrnew的型別和ptrold的型別相同,ptrnew所指向的型別和ptrold所指向的型別

也相同。ptrnew的值將比ptrold的值增加了n乘sizeof(ptrold所指向的型別)個字

節。就是說,ptrnew所指向的記憶體區將比ptrold所指向的記憶體區向高位址方向移

動了n乘sizeof(ptrold所指向的型別)個位元組。

乙個指標ptrold減去乙個整數n後,結果是乙個新的指標ptrnew,ptrnew的類

型和ptrold的型別相同,ptrnew所指向的型別和ptrold所指向的型別也相同。pt

rnew的值將比ptrold的值減少了n乘sizeof(ptrold所指向的型別)個位元組,就是說

,ptrnew所指向的記憶體區將比ptrold所指向的記憶體區向低位址方向移動了n乘siz

eof(ptrold所指向的型別)個位元組。

第二章 in ,like , 集合運算

in select from emp2 where job salesman or job president or job analyst select from emp2 where job in salesman president analyst not in 注意and的使用 select...

C和指標 第二章

1.編譯過程首先是預處理器處理,在這個階段,預處理器再源 上執行一些文字操作。例如,用實際值代替由 define 指令定義的符號 以及讀入由 include 指令包含的檔案內容。然後,源 經過解析,判斷它的語句的意思 隨後,便產生目標 優化器會對目標 進一步進行處理,使它效率更高,但需要額外的時間。...

第二章 運算子 if switch

運算子 算數運算子 取餘 賦值運算子 邏輯運算子 比較運算子 位運算子 型別轉換 強制型別轉換 轉換為number型別 number 方法 該方法的引數不能是非數字的 特殊 number true 為1 number false 為0 該方法可對boolean型別進行轉換 parseint 可以有進...