<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

            C語言指針變量的運算

            時間:2025-05-05 22:05:17 C語言 我要投稿
            • 相關推薦

            C語言指針變量的運算

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

              1.指針運算符

              (1)取地址運算符&

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

              (2)取內容運算符*

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

              main(){

              int a=5,*p=&a;

              printf ("%d",*p);

              }

              ......

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

              2.指針變量的運算

              (1)賦值運算

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

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

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

              int a,*pa;

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

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

              int a,*pa=&a,*pb;

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

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

              例如: int a[5],*pa;

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

              也可寫為:

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

              也可賦予pa*/

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

              int a[5],*pa=a;

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

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

              (2)加減算術運算

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

              例如:

              int a[5],*pa;

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

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

              ①兩指針變量相減

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

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

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

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

              pf1>pf2表示pf1處于高地址位置

              pf1<pf2表示pf2處于低地址位置< p="">

              main(){

              int a=10,b=20,s,t,*pa,*pb;

              pa=&a;

              pb=&b;

              s=*pa+*pb;

              t=*pa**pb;

              printf("a=%d/nb=%d/na+b=%d/na*b=%d/n",a,b,a+b,a*b);

              printf("s=%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值而得到的。例如: #define NULL 0 int *p=NULL; 對指針變量賦0值和不賦值是不同的。指針變量未賦值時,可以是任意值,是不能使用的。否則將造成意外錯誤。而指針變量賦0值后,則可以使用,只是它不指向具體的變量而已。

              main(){

              int a,b,c,*pmax,*pmin;

              printf("input three numbers:/n");

              scanf("%d%d%d",&a,&b,&c);

              if(a>b){

              pmax=&a;

              pmin=&b;}

              else{

              pmax=&b;

              pmin=&a;}

              if(c>*pmax) pmax=&c;

              if(c<*pmin) pmin=&c;

              printf("max=%d/nmin=%d/n",*pmax,*pmin);

              }

              ......

              pmax,pmin為整型指針變量。

              輸入提示。

              輸入三個數字。

              如果第一個數字大于第二個數字...

              指針變量賦值

              指針變量賦值

              指針變量賦值

              指針變量賦值

              判斷并賦值

              判斷并賦值

              輸出結果


            【C語言指針變量的運算】相關文章:

            C語言指針變量的類型07-31

            C語言函數指針變量09-08

            c語言數組指針變量的說明和使用07-26

            C語言的指針10-11

            c語言使用字符串指針變量與的區別09-21

            C語言中指針變量作為函數參數詳解07-01

            C語言中可移植且可靠的指針運算10-03

            C語言指針的總結08-12

            C語言指針教學10-28

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院