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

旅途

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

指針變量的儲(chǔ)單元的大小

main()
{
int i;
int *p = &i;
printf("%d",sizeof(p));
}
我32位CPU,
在VC測(cè)試: 4
在TC測(cè)試: 2
請(qǐng)問(wèn),指針變量存儲(chǔ)單元的大小與什么有關(guān)?
指針大小和當(dāng)前系統(tǒng)的地址總線位數(shù)一樣,TC運(yùn)行在16位模擬器中,所以指針大小是16位即2個(gè)字節(jié),vc就是32位的,int類型的大小也和這個(gè)一樣是變的,其它類型的大小不會(huì)變的
TC和VC所支持的語(yǔ)言標(biāo)準(zhǔn)不同,跟16位和32位編程無(wú)關(guān)。
TC支持純C語(yǔ)言,純C語(yǔ)言里的6種int型數(shù)據(jù)中只有l(wèi)ong和unsigned long型長(zhǎng)度是4字節(jié),另外4種長(zhǎng)度是2字節(jié),而VC里支持的C語(yǔ)言全部6種int型數(shù)據(jù)長(zhǎng)度全部是4字節(jié)。我們知道,指針的長(zhǎng)度和其相應(yīng)的數(shù)據(jù)類型長(zhǎng) 度相等,所以int型指針在TC里是2字節(jié),在VC里是4字節(jié)。

指針的大小是問(wèn):一個(gè)指針變量占用多少內(nèi)存空間?

 

分析:既然指針只是要存儲(chǔ)另一個(gè)變量的地址,。注意,是存放一變量的地址,而不是存放一個(gè)變量本身,所以,不管指針指向什么類型的變量,它的大小總是固定的:只要能放得下一個(gè)地址就行!(這是一間只有煙盒大小的“房間”,因?yàn)樗恍枰胍粡埮c著地址的紙條)。

 

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

 

所以,若有:

int* pInt;

char* pChar;

bool* pBool;

float* pFloat;

double* pDouble;

 

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

 

(你敢拆電腦嗎?拆開(kāi)電腦,認(rèn)得硬盤(pán)數(shù)據(jù)線嗎?仔細(xì)數(shù)數(shù)那扁寬的數(shù)據(jù)線由幾條細(xì)線組成?答案:32條,正是 4 * 8)。





指向數(shù)組的指針

 

現(xiàn)在,來(lái)說(shuō)說(shuō)指針指向一個(gè)數(shù)組的情況。

 

int arr[] = {1,2,3,4,5}; //一個(gè)數(shù)組

 

int* parr; //一個(gè)指針。

 

parr = arr; //沒(méi)有&?對(duì)啊,對(duì)數(shù)組就是不用取址符。

 

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

 

先猜想一下,輸出結(jié)果是什么?

 

最“直覺(jué)”的想法是:parr 指向一個(gè)數(shù)組,那么輸出時(shí),自然是輸出數(shù)組中的所有元素了。所以答案應(yīng)該是:“12345”了?

不過(guò),我想,學(xué)過(guò)前面的數(shù)組,我們就能知道這種想法錯(cuò)誤。

 

正確答案是輸出數(shù)組中的第一個(gè)元素: 1 。

 

接下來(lái),如果是這樣輸出呢?

 

parr = arr;

cout << parr << endl;

 

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

cout << arr << endl; 的作用

 

在這里,難點(diǎn)是要記住,數(shù)組變量本身就是地址。所以有:

 

1、想讓指針變量存儲(chǔ)一個(gè)數(shù)組的地址(想讓指針變量指向一個(gè)數(shù)組)時(shí),不用取址符。

2、解析一個(gè)指向數(shù)組的指針,得到的是數(shù)組的第一個(gè)元素



偏移指針


int* parr2;

 

parr2 = parr + 1;

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

 

重點(diǎn) & 易錯(cuò)點(diǎn):對(duì)指針 進(jìn)行加1操作,得到的是下一個(gè)元素的地址,而不是原有地址值直接加1。

 

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

 

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

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

 

比如:

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



指針的最小移動(dòng)單位

 

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

int* pI = arr;

 

cout << "pI 是一個(gè)指向整型數(shù)組的指針,移動(dòng)單位:4字節(jié)" << endl;

 

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

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

 

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

 

//接下 來(lái)是一個(gè)指向char類型數(shù)組的指針:

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

 

char*? pC = str;

 

cout << "pC 是一個(gè)指向字符數(shù)組的指針,移動(dòng)單位:1字節(jié)" << endl;

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

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

 

system("PAUSE");

 

輸出結(jié)果:

(指針的最小移動(dòng)單位)

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

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

 


* (地址解析符)與 ++ 的優(yōu)先級(jí)


指針的前置++與后置++的區(qū)別

 

//代碼片段一:

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;

 

輸出結(jié)果:

 

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;

 

輸出結(jié)果:

 

A = 2;

B = 2;

 

 

19.8.7* (地址解析符)與 ++ 的優(yōu)先級(jí)

 

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

 

int A = *parr++;

 

我們來(lái)一個(gè)反證:假設(shè)*的優(yōu)先級(jí)比++高,那么,應(yīng)先計(jì)算:

 

*parr 結(jié)果為: 1 (第一個(gè)元素)

然后計(jì)算? 1++ ,結(jié)果為:2。

 

但實(shí)驗(yàn)發(fā)現(xiàn)結(jié)果為 1,這個(gè)1 又是如何來(lái)的呢?有點(diǎn)復(fù)雜。

首先,++優(yōu)先計(jì)算,所以應(yīng)先計(jì)算:parr++

結(jié)果是parr指向了下一個(gè)元素:2。因?yàn)檫@是后置++,所以,它必須返回自己計(jì)算之前的值;所以,在改變parr之前,編譯程序會(huì)生成一個(gè)臨時(shí)變量,計(jì)算原先parr的值。我們假設(shè)為 old_parr 。下面是第二步操作:

A = *old_parr

由于 old_parr parr 原來(lái)的值,指向第一個(gè)元素,所以 A 得到值: 1 。

 

可見(jiàn),后置 ++ 或 后置-- 操作,需要系統(tǒng)生成一個(gè)臨時(shí)變量。

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

 

你自然會(huì)問(wèn),前置++就不會(huì)產(chǎn)生臨時(shí)變量嗎?我們來(lái)試試。

 

int A = *++parr;

 

同樣,++優(yōu)先級(jí)大于*,所以先計(jì)算:++parr

結(jié)果parr 指向下一個(gè)元素。因?yàn)檫@是前置++,所以,它只需要返回的,正是自己計(jì)算之后的值。下一步是:

A = *parr;

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

 

19.8.8上機(jī)實(shí)驗(yàn)六:指針的 ++與--操作

 

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

 

int* parr = arr;

 

//前進(jìn) ++

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

{

?? cout << *parr << endl;

?? parr++;?? //如果為了優(yōu)化,你可以寫(xiě)成:++parr :D

?

?? /*

???? 上面兩句你還可以寫(xiě)成一句:?

???? cout << *parr++ << endl;? //這里,你可不能為了優(yōu)化寫(xiě)成: *++parr.

? */

}

 

//后退 --:

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

{

?? parr--;

?? cout << *parr << endl;

}

 

輸出結(jié)果:

(指針的++與--)

 


posted on 2007-09-06 01:23 旅途 閱讀(1399) 評(píng)論(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>
            欧美高清一区二区| 亚洲精品综合久久中文字幕| 国内外成人免费激情在线视频网站| 伊人夜夜躁av伊人久久| 久久激情久久| 亚洲欧洲av一区二区三区久久| 欧美国产日韩一区二区| 亚洲精品裸体| 中文一区二区在线观看| 欧美日韩一区在线| 欧美一区二区精品| 久久精品亚洲一区| **欧美日韩vr在线| 日韩一级免费| 国产女主播一区二区| 鲁鲁狠狠狠7777一区二区| 免费国产自线拍一欧美视频| 99精品欧美一区二区三区 | 亚洲一区二区三区777| 国产婷婷精品| 激情小说亚洲一区| 亚洲韩国一区二区三区| 欧美成人激情视频| 欧美日韩一区二区在线观看| 欧美在线观看视频| 欧美日韩国产成人在线免费 | 欧美一区二区精美| 一区二区日韩| 免费试看一区| 美日韩精品免费| 国产婷婷一区二区| 亚洲欧美日韩专区| 亚洲欧美一级二级三级| 欧美日韩亚洲综合一区| 亚洲高清不卡在线观看| 亚洲第一在线视频| 久久久久久久久久码影片| 欧美亚洲自偷自偷| 国产欧美日韩一区二区三区在线观看| 一本大道久久a久久精二百| 99精品视频免费观看视频| 男同欧美伦乱| 亚洲免费av片| 欧美一区三区三区高中清蜜桃| 国产精品欧美精品| 亚洲男人第一av网站| 久久精品国产综合精品| 一区二区在线观看视频| 老司机久久99久久精品播放免费| 久热精品视频在线| 亚洲视频二区| 国产一区二区三区四区| 久久性色av| a91a精品视频在线观看| 欧美一区二区三区久久精品| 国产精品欧美激情| 免费日韩一区二区| 午夜一区二区三区在线观看| 欧美高清一区二区| 亚洲欧美日韩在线观看a三区| 久久久久久久久久久成人| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一本久道久久综合婷婷鲸鱼| 国产精品v日韩精品v欧美精品网站| 亚洲综合成人婷婷小说| 欧美黄色免费| 欧美在线影院| 中文在线不卡视频| 亚洲国产综合在线| 国产自产2019最新不卡| 欧美午夜在线视频| 欧美精品一区二区三区蜜桃 | 亚洲小视频在线观看| 亚洲欧洲日韩女同| 亚洲成在线观看| 亚洲成人资源| 亚洲日本电影在线| 精品动漫3d一区二区三区免费版 | 国产精品日韩欧美一区二区三区| 久热国产精品| 蜜桃av噜噜一区| 欧美88av| 欧美日韩午夜在线视频| 欧美日韩亚洲一区二区三区| 欧美视频网址| 国产伦精品一区二区三区高清版 | 亚洲黄色影片| 嫩模写真一区二区三区三州| 久久免费视频这里只有精品| 久久成人18免费网站| 久久免费视频在线| 亚洲激情在线观看| aaa亚洲精品一二三区| 欧美伊人久久大香线蕉综合69| 欧美一区二区三区四区在线观看地址 | 亚洲经典在线看| 亚洲国产精品va在线观看黑人| 久久中文在线| 亚洲综合电影一区二区三区| 欧美日韩在线精品| 一区二区三区欧美激情| 亚洲美洲欧洲综合国产一区| 欧美大片国产精品| 亚洲一区高清| 亚洲美女av黄| 亚洲欧美中文另类| 久久综合九色99| 日韩视频―中文字幕| 久久激情视频| 久久女同精品一区二区| 一区二区三区免费在线观看| 夜夜嗨av色一区二区不卡| 一区二区三区四区国产精品| 久久精品九九| 亚洲男女自偷自拍| 欧美日韩1234| 亚洲美女av电影| 久久综合免费视频影院| 亚洲综合日韩| 国产精品亚洲综合一区在线观看 | 欧美国产精品中文字幕| 亚洲影院在线观看| 欧美亚洲一区| 夜夜夜久久久| 亚洲精品一区二区三区99| 亚洲欧洲日韩在线| 亚洲高清三级视频| 亚洲大片一区二区三区| 欧美ed2k| 亚洲精品久久久久久一区二区| 免费观看不卡av| 亚洲国产经典视频| 亚洲清纯自拍| 一本久道久久综合中文字幕| 日韩视频一区二区在线观看| 亚洲日韩欧美一区二区在线| 亚洲精选一区| 羞羞视频在线观看欧美| 久久精品国产99国产精品澳门| 久久er99精品| 欧美日韩亚洲高清| 国产精品一区=区| 精品va天堂亚洲国产| 亚洲午夜精品在线| 久热精品视频在线| 欧美亚洲综合网| 国产精品久久国产精品99gif| 一区二区三区在线免费观看| 亚洲午夜伦理| 亚洲精品国产日韩| 欧美99在线视频观看| 国产精品亚洲欧美| 一区二区三区久久久| 亚洲欧美日韩中文视频| 亚洲高清免费视频| 久久久www| 影音先锋亚洲视频| 亚洲专区欧美专区| 国产欧美综合在线| 日韩一级黄色av| 亚洲电影免费观看高清完整版| 性欧美xxxx视频在线观看| 国产精品爱啪在线线免费观看| 亚洲电影网站| 欧美电影免费观看高清完整版| 午夜欧美精品| 在线国产日韩| 亚洲国产欧美一区二区三区丁香婷| 亚洲一区二区精品在线观看| 国产精品嫩草影院av蜜臀| 久久不射网站| 免费黄网站欧美| 夜夜嗨av一区二区三区网页| 亚洲激情成人在线| 国产精品福利在线观看网址| 久久精品99久久香蕉国产色戒 | 国产精品试看| 欧美gay视频激情| 国产精品欧美风情| 欧美高清视频免费观看| 国产精品xnxxcom| 亚洲成色777777女色窝| 欧美三级在线播放| 欧美国产日韩一区二区| 国产伦精品一区二区三区高清| 老司机精品久久| 国产日韩在线亚洲字幕中文| 女女同性精品视频| 国产日韩视频| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品视频一区| 久久久久免费视频| 久久精品日韩欧美| 国产精品爽爽爽| 亚洲一区二区四区| 香蕉av777xxx色综合一区| 欧美日韩人人澡狠狠躁视频| 亚洲第一福利社区| 亚洲黄色在线| 欧美久久久久久久久|