C語言指針變量的運算_第1頁
C語言指針變量的運算_第2頁
C語言指針變量的運算_第3頁
C語言指針變量的運算_第4頁
C語言指針變量的運算_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——C語言指針變量的運算C語言指針變量的運算

導語:指針變量可以舉行某些運算,但其運算的種類是有限的。它只能舉行賦值運算和片面算術運算及關系運算。讓我們了解一下C語言指針變量如何運算吧!

1.指針運算符

1取地址運算符

取地址運算符是單目運算符,其結合性為自右至左,其功能是取變量的地址。在scanf函數及前面介紹指針變量賦值中,我們已經了解并使用了運算符。

2取內容運算符*

取內容運算符*是單目運算符,其結合性為自右至左,用來表示指針變量所指的變量。在*運算符之后跟的變量務必是指針變量。需要留神的是指針運算符*和指針變量說明中的指針說明符*不是一回事。在指針變量說明中,“*”是類型說明符,表示其后的變量是指針類型。而表達式中展現的“*”那么是一個運算符用以表示指針變量所指的變量。

main

inta=5,*p=a;

printf%d,*p;

表示指針變量p取得了整型變量a的地址。本語句表示輸出變量a的值。

2.指針變量的運算

1賦值運算

指針變量的賦值運算有以下幾種形式:

①指針變量初始化賦值,前面已作介紹。

②把一個變量的地址賦予指向一致數據類型的指針變量。例如:

inta,*pa;

pa=a;/*把整型變量a的地址賦予整型指針變量pa*/

③把一個指針變量的值賦予指向一致類型變量的另一個指針變量。如:

inta,*pa=a,*pb;

pb=pa;/*把a的地址賦予指針變量pb*/

由于pa,pb均為指向整型變量的指針變量,因此可以相互賦值。④把數組的首地址賦予指向數組的指針變量。

例如:inta[5],*pa;

pa=a;數組名表示數組的首地址,故可賦予指向數組的指針變量pa

也可寫為:

pa=a[0];/*數組第一個元素的'地址也是整個數組的首地址,

也可賦予pa*/

當然也可采取初始化賦值的方法:

inta[5],*pa=a;

⑤把字符串的首地址賦予指向字符類型的指針變量。例如:char*pc;pc=clanguage;或用初始化賦值的方法寫為:char*pc=CLanguage;這里應說明的是并不是把整個字符串裝入指針變量,而是把存放該字符串的字符數組的首地址裝入指針變量。在后面還將細致介紹。

⑥把函數的入口地址賦予指向函數的指針變量。例如:int*pf;pf=f;/*f為函數名*/

2加減算術運算

對于指向數組的指針變量,可以加上或減去一個整數n。設pa是指向數組a的指針變量,那么pa+n,pa-n,pa++,++pa,pa--,--pa運算都是合法的。指針變量加或減一個整數n的意義是把指針指向的當前位置指向某數組元素向前或向后移動n個位置。理應留神,數組指針變量向前或向后移動一個位置和地址加1或減1在概念上是不同的。由于數組可以有不同的類型,各種類型的數組元素所占的字節(jié)長度是不同的。如指針變量加1,即向后移動1個位置表示指針變量指向下一個數據元素的首地址。而不是在原地址根基上加1。

例如:

inta[5],*pa;

pa=a;/*pa指向數組a,也是指向a[0]*/

pa=pa+2;/*pa指向a[2],即pa的值為pa[2]*/指針變量的加減運算只能對數組指針變量舉行,對指向其它類型變量的指針變量作加減運算是毫無意義的。3兩個指針變量之間的運算只有指向同一數組的兩個指針變量之間才能舉行運算,否那么運算毫無意義。

①兩指針變量相減

兩指針變量相減所得之差是兩個指針所指數組元素之間相差的元素個數。實際上是兩個指針值地址相減之差再除以該數組元素的長度字節(jié)數。例如pf1和pf2是指向同一浮點數組的兩個指針變量,設pf1的值為2022H,pf2的值為2000H,而浮點數組每個元素占4個字節(jié),所以pf1-pf2的結果為2000H-2022H/4=4,表示pf1和pf2之間相差4個元素。兩個指針變量不能舉行加法運算。例如,pf1+pf2是什么意思呢?毫無實際意義。

②兩指針變量舉行關系運算

指向同一數組的兩指針變量舉行關系運算可表示它們所指數組元素之間的關系。例如:

pf1==pf2表示pf1和pf2指向同一數組元素

pf1pf2表示pf1處于高地址位置

pf1pf2表示pf2處于低地址位置p=

main

inta=10,b=20,s,t,*pa,*pb;

pa=a;

pb=b;

s=*pa+*pb;

t=*pa**pb;

printfa=%d/nb=%d/na+b=%d/na*b=%d/n,a,b,a+b,a*b;

printfs=%d/nt=%d/n,s,t;

說明pa,pb為整型指針變量

給指針變量pa賦值,pa指向變量a。

給指針變量pb賦值,pb指向變量b。

本行的意義是求a+b之和,*pa就是a,*pb就是b。

本行是求a*b之積。

輸出結果。

輸出結果。

指針變量還可以與0對比。設p為指針變量,那么p==0說明p是空指針,它不指向任何變量;p!=0表示p不是空指針。空指針是由對指針變量賦予0值而得到的。例如:#defineNULL0int*p=NULL;對指針變量賦0值和不賦值是不同的。指針變量未賦值時,可以是任意值,是不能使用的。否那么將造成意外錯誤。而指針變量賦0值后,那么可以使用,只是它不指向概括的變量而已。

main

inta,b,c,*pmax,*pmin;

printfinputthreenumbers:/n;

scanf%d%d%d,a,b,c;

ifab

pmax=a;

pmin=b;

else

pmax=b;

pmin=a;

ifc*pmaxpmax=c;

ifc*pminpmin=c;

printfmax=%d/nmin=%d/n,*pmax,*pmin;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論