青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

指針變量的儲單元的大小

main()
{
int i;
int *p = &i;
printf("%d",sizeof(p));
}
我32位CPU,
在VC測試: 4
在TC測試: 2
請問,指針變量存儲單元的大小與什么有關?
指針大小和當前系統的地址總線位數一樣,TC運行在16位模擬器中,所以指針大小是16位即2個字節,vc就是32位的,int類型的大小也和這個一樣是變的,其它類型的大小不會變的
TC和VC所支持的語言標準不同,跟16位和32位編程無關。
TC支持純C語言,純C語言里的6種int型數據中只有long和unsigned long型長度是4字節,另外4種長度是2字節,而VC里支持的C語言全部6種int型數據長度全部是4字節。我們知道,指針的長度和其相應的數據類型長 度相等,所以int型指針在TC里是2字節,在VC里是4字節。

指針的大小是問:一個指針變量占用多少內存空間?

 

分析:既然指針只是要存儲另一個變量的地址,。注意,是存放一變量的地址,而不是存放一個變量本身,所以,不管指針指向什么類型的變量,它的大小總是固定的:只要能放得下一個地址就行!(這是一間只有煙盒大小的“房間”,因為它只需要入一張與著地址的紙條)。

 

存放一個地址需要幾個字節?答案是和一個 int 類型的大小相同:4字節。

 

所以,若有:

int* pInt;

char* pChar;

bool* pBool;

float* pFloat;

double* pDouble;

 

:sizeof(pInt)、sizeof(pChar)、sizeof(pBool)、sizeof(pFloat)、sizeof(pDouble)的值全部為:4。

 

(你敢拆電腦嗎?拆開電腦,認得硬盤數據線嗎?仔細數數那扁寬的數據線由幾條細線組成?答案:32條,正是 4 * 8)。





指向數組的指針

 

現在,來說說指針指向一個數組的情況。

 

int arr[] = {1,2,3,4,5}; //一個數組

 

int* parr; //一個指針。

 

parr = arr; //沒有&?對啊,對數組就是不用取址符。

 

cout << *parr << endl;? //輸出 *parr

 

先猜想一下,輸出結果是什么?

 

最“直覺”的想法是:parr 指向一個數組,那么輸出時,自然是輸出數組中的所有元素了。所以答案應該是:“12345”了?

不過,我想,學過前面的數組,我們就能知道這種想法錯誤。

 

正確答案是輸出數組中的第一個元素: 1 。

 

接下來,如果是這樣輸出呢?

 

parr = arr;

cout << parr << endl;

 

答案是輸出了arr的地址。就等同于輸出 arr

cout << arr << endl; 的作用

 

在這里,難點是要記住,數組變量本身就是地址。所以有:

 

1、想讓指針變量存儲一個數組的地址(想讓指針變量指向一個數組)時,不用取址符。

2、解析一個指向數組的指針,得到的是數組的第一個元素



偏移指針


int* parr2;

 

parr2 = parr + 1;

加1后,指針指向了下一個元素。由于這是一個 int 類型的數組,每個元素的大小是4個字節。所以第二個元素的地址是10000014。

 

重點 & 易錯點:對指針 進行加1操作,得到的是下一個元素的地址,而不是原有地址值直接加1。

 

知到了如何“加”,也就知道了如何“減”。減以后,得到的是上一個元素的大小。

 

所以,一個類型為 T 的指針的移動,以 sizeof(T) 為移動單位。

所以,一個類型為 T 的指針的移動,以 sizeof(T) 為移動單位。

 

比如:

int* pInt; 移動單位為 sizeof(int) 。即:4。而 char* pChar; 移動單位為 sizeof(char)。即1。



指針的最小移動單位

 

int arr[6] = {101,102,103,104,105,106};

int* pI = arr;

 

cout << "pI 是一個指向整型數組的指針,移動單位:4字節" << endl;

 

for (int i = 0; i < 6; i++)

?? cout << "pI + " << i << " ----> " << pI + i << ", *(pI + i) = "? << *(pI + i) << endl;??

 

cout << "------------------------------------" << endl;

 

//接下 來是一個指向char類型數組的指針:

char str[4] = {'a','b','c','d'}

 

char*? pC = str;

 

cout << "pC 是一個指向字符數組的指針,移動單位:1字節" << endl;

for (int i=0; i < 4; i++)

??? cout << "pC + " << i << " ----> " << (int)(pC + i) << ", *(pC + i) = "? << *(pC + i) << endl;??

 

system("PAUSE");

 

輸出結果:

(指針的最小移動單位)

每一行中,程序先輸出指針加上偏移量以后的值(地址),比如:1245024、1245028;然后輸出偏移后指針指向的值,比如101,102。

查看移動前后指針存儲的地址,我們就可以計算出移動單位。1245028 - 1245024 = 4 (byte)。

 


* (地址解析符)與 ++ 的優先級


指針的前置++與后置++的區別

 

//代碼片段一:

int arr[] = {1,2,3,4,5,6,7,8,9,10};

int* parr1 = arr;

 

int A = *parr1++;

int B = *parr1;

 

cout << "A = " << A << endl;

cout << "B = " << B << endl;

 

輸出結果:

 

A = 1;

B = 2;

 

代碼片段二:

 

int arr[] = {1,2,3,4,5,6,7,8,9,10};

int* parr1 = arr;

 

int A = *++parr1;

int B = *parr1;

 

cout << "A = " << A << endl;

cout << "B = " << B << endl;

 

輸出結果:

 

A = 2;

B = 2;

 

 

19.8.7* (地址解析符)與 ++ 的優先級

 

從上例中我們可以看到。當 * (作為地址解析符) ++ 同時作用在指針時,不管是前置還是++,都要比*有更高的優先級。比如代碼中的:

 

int A = *parr++;

 

我們來一個反證:假設*的優先級比++高,那么,應先計算:

 

*parr 結果為: 1 (第一個元素)

然后計算? 1++ ,結果為:2。

 

但實驗發現結果為 1,這個1 又是如何來的呢?有點復雜。

首先,++優先計算,所以應先計算:parr++

結果是parr指向了下一個元素:2。因為這是后置++,所以,它必須返回自己計算之前的值;所以,在改變parr之前,編譯程序會生成一個臨時變量,計算原先parr的值。我們假設為 old_parr 。下面是第二步操作:

A = *old_parr

由于 old_parr parr 原來的值,指向第一個元素,所以 A 得到值: 1 。

 

可見,后置 ++ 或 后置-- 操作,需要系統生成一個臨時變量。

如果這個變量占用的內存空間很小(比如指針類型總是只有4字節),則該操作帶來的,對程序速度的負面影響可以不計,如果變量很大,并且多次操作。則應在可能的情況下,盡量使用前置++或前置--操作。

 

你自然會問,前置++就不會產生臨時變量嗎?我們來試試。

 

int A = *++parr;

 

同樣,++優先級大于*,所以先計算:++parr

結果parr 指向下一個元素。因為這是前置++,所以,它只需要返回的,正是自己計算之后的值。下一步是:

A = *parr;

由于 parr 此時已完成++操作,指向下一個元素。所以 A 得到值: 2

 

19.8.8上機實驗六:指針的 ++與--操作

 

int arr [] = {1,2,3,4,5};

 

int* parr = arr;

 

//前進 ++

for (int i=0; i < 5; i++) //如果為了優化,你可以寫成: ++i :)

{

?? cout << *parr << endl;

?? parr++;?? //如果為了優化,你可以寫成:++parr :D

?

?? /*

???? 上面兩句你還可以寫成一句:?

???? cout << *parr++ << endl;? //這里,你可不能為了優化寫成: *++parr.

? */

}

 

//后退 --:

for (int i=0; i < 5; i++)

{

?? parr--;

?? cout << *parr << endl;

}

 

輸出結果:

(指針的++與--)

 


posted on 2007-09-06 01:23 旅途 閱讀(1399) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费观看欧美在线视频的网站| 狠狠久久婷婷| 国产精品国产亚洲精品看不卡15| 亚洲毛片在线| 欧美插天视频在线播放| 亚洲综合欧美| 国产精品视频内| 久久久久国内| 一区二区三区在线高清| 久久成人在线| 午夜精品久久| 在线成人中文字幕| 亚洲精品视频在线| 亚洲另类在线视频| 国产最新精品精品你懂的| 欧美日韩一区二区三区四区五区 | 韩日精品视频一区| 香蕉成人久久| 久久亚洲精品欧美| 尤物精品国产第一福利三区| 免费成人毛片| 国产欧美在线播放| 亚洲国产精品久久久| 国产欧美一区二区精品性色| 久久精品99无色码中文字幕| 久久蜜臀精品av| 欧美亚洲系列| 欧美日韩一二三区| 亚洲国产精品成人精品| 国产一区二区三区成人欧美日韩在线观看 | 99精品国产热久久91蜜凸| 亚洲一区二区三区免费视频| 最新国产成人在线观看| 欧美一级夜夜爽| 香蕉成人啪国产精品视频综合网| 国产一区二区三区四区| 亚洲精品视频在线看| 亚洲欧洲一二三| 狂野欧美性猛交xxxx巴西| 久久免费视频这里只有精品| 久久综合九九| 欧美国产日本韩| 亚洲国产精品99久久久久久久久| 久久久91精品国产一区二区三区| 亚洲区第一页| 欧美一区二区三区播放老司机| 亚洲精品系列| 欧美日韩在线播放一区| 一区二区三区日韩| 欧美一级午夜免费电影| 国产美女一区| 久久久噜噜噜久噜久久 | 亚洲欧美日韩电影| 一本久久综合亚洲鲁鲁五月天| 99视频一区二区三区| 欧美成年人在线观看| 99精品免费| 久久久人成影片一区二区三区 | 99精品热视频| 久久精品国产一区二区三区| 在线成人av.com| 亚洲在线不卡| 亚洲成人资源| 国产精品色午夜在线观看| 欧美精品在线观看播放| 99精品视频免费| 久久影音先锋| 欧美在线视频免费| 亚洲性夜色噜噜噜7777| 亚洲精品一区二| 黄色亚洲大片免费在线观看| 91久久在线| 女生裸体视频一区二区三区| 午夜在线观看欧美| 亚洲国产成人av好男人在线观看| 欧美视频一区二区三区…| 一区二区三区久久网| 欧美在线免费一级片| 午夜精品电影| 欧美一区二区三区在| 欧美一区二区三区视频在线观看| 先锋影音一区二区三区| 免费观看亚洲视频大全| 91久久在线播放| 一区二区国产在线观看| 亚洲婷婷免费| 久久亚洲不卡| 欧美日韩一区二区三区视频| 国产精品入口尤物| 在线 亚洲欧美在线综合一区| 在线观看91精品国产麻豆| 亚洲区在线播放| 精品成人在线视频| 亚洲伦伦在线| 欧美一区二区三区久久精品茉莉花 | 红桃av永久久久| 亚洲视频日本| 久久大逼视频| 欧美女同在线视频| 国产精品一区二区视频| 亚洲承认在线| 久久久美女艺术照精彩视频福利播放| 欧美专区在线观看一区| 亚洲黄色高清| 久久激五月天综合精品| 国产精品久久久久999| 国产精品www网站| 在线成人av网站| 鲁大师成人一区二区三区| 久久久久五月天| 99精品国产在热久久婷婷| 欧美影院在线播放| 欧美色道久久88综合亚洲精品| 在线观看亚洲精品视频| 久久国产精品99国产精| 亚洲精品免费观看| 免费成人高清视频| 久久精品亚洲精品| 国内精品久久久久久影视8| 午夜精品国产| 亚洲欧美国产制服动漫| 欧美少妇一区二区| 亚洲欧美日韩精品久久久久| 欧美激情按摩| 免费高清在线一区| 亚洲第一在线视频| 欧美国产综合| 欧美人成在线视频| 一区二区精品| 亚洲免费视频中文字幕| 国产一区二区三区av电影| 久久久久久高潮国产精品视| 久久国产精品久久久久久久久久 | 日韩视频不卡中文| 欧美日韩福利视频| 亚洲视频免费看| 欧美在线视频一区二区三区| 亚洲第一精品影视| 一本色道精品久久一区二区三区| 国产精品一区亚洲| 久久久久国产精品一区二区| 久久久久.com| 亚洲欧美日韩国产精品| 久久久久久久一区二区| 这里只有精品视频在线| 久久午夜精品| 久久精品欧美日韩精品| 亚洲人成在线观看一区二区| 欧美日韩一区二区在线| 麻豆精品精品国产自在97香蕉| 欧美日韩另类视频| 亚洲欧美国产三级| 免费观看欧美在线视频的网站| 欧美亚洲三级| 国产精品一区二区久久| 亚洲第一天堂av| 国产综合亚洲精品一区二| 一区二区三区国产盗摄| 一区二区激情小说| 免费在线观看日韩欧美| 亚洲国产精品毛片| 久久精品一区二区三区不卡牛牛 | 欧美精品一区二区三| 老司机精品福利视频| 狠狠色伊人亚洲综合成人| 先锋资源久久| 久久艳片www.17c.com| 一区二区在线看| 美女主播精品视频一二三四| 久久免费国产精品1| 国产精品高精视频免费| 一区二区三区欧美激情| 亚洲欧美视频| 国产亚洲一区精品| 一本色道久久综合亚洲精品高清| 日韩视频在线观看一区二区| 欧美日本国产一区| 亚洲无线一线二线三线区别av| 午夜一区不卡| 最新中文字幕亚洲| 欧美日韩国产精品专区| 欧美刺激午夜性久久久久久久| 亚洲人成绝费网站色www| 欧美日韩性生活视频| 香蕉久久一区二区不卡无毒影院| 美女视频网站黄色亚洲| 亚洲性视频网址| 亚洲精品一区二区三区樱花| 国产精品有限公司| 欧美激情在线有限公司| 久久精品成人| 久久人人精品| 99ri日韩精品视频| 国产主播精品在线| 国产精品盗摄一区二区三区| 久久夜色精品国产噜噜av| 欧美一区二区大片| 久久精品免视看| 99精品热视频| 一区二区精品国产|