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

旅途

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

指針變量的儲(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類(lèi)型的大小也和這個(gè)一樣是變的,其它類(lèi)型的大小不會(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ù)類(lèi)型長(zhǎng) 度相等,所以int型指針在TC里是2字節(jié),在VC里是4字節(jié)。

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

 

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

 

存放一個(gè)地址需要幾個(gè)字節(jié)?答案是和一個(gè) int 類(lèi)型的大小相同: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 類(lèi)型的數(shù)組,每個(gè)元素的大小是4個(gè)字節(jié)。所以第二個(gè)元素的地址是10000014。

 

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

 

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

 

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

所以,一個(gè)類(lèi)型為 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類(lèi)型數(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)存空間很小(比如指針類(lè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)  編輯 收藏 引用 所屬分類(lèi): 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>
            亚洲日本中文字幕免费在线不卡| 欧美成人一品| 亚洲黑丝一区二区| 久久精品国产清自在天天线| 久热精品在线| 国产午夜精品一区二区三区视频 | 亚洲欧美一区二区三区久久| 亚洲区一区二| 一区二区成人精品| 午夜视频在线观看一区二区| 欧美与黑人午夜性猛交久久久| 亚洲视频每日更新| 欧美一区二区免费观在线| 久久精品最新地址| 亚洲第一在线综合在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 中文国产成人精品| 亚洲欧美一区二区视频| 亚洲欧美综合国产精品一区| 久久久久在线| 欧美日韩一区二区欧美激情| 国产日韩久久| 一本色道久久综合亚洲精品婷婷 | 国产精品久久二区| 欧美激情综合在线| 国产亚洲精品自拍| 日韩午夜中文字幕| 玖玖玖国产精品| 宅男噜噜噜66一区二区| 久久久精品五月天| 国产乱码精品一区二区三| 日韩视频在线观看国产| 久久久久久久久综合| 中文av一区特黄| 欧美日韩中文| 亚洲一区二区动漫| 亚洲精品亚洲人成人网| 另类av一区二区| 韩日成人av| 久久久精品国产免费观看同学 | 在线观看91精品国产入口| 性色av香蕉一区二区| 亚洲美女av在线播放| 欧美日韩国产一区二区| 99精品欧美一区二区三区| 亚洲国产第一| 欧美日韩视频在线一区二区| 亚洲在线观看免费| 亚洲国产精品一区二区久| 一本色道**综合亚洲精品蜜桃冫 | 一区二区三区黄色| 日韩一级网站| 国产精品久久久久久久电影| 欧美+日本+国产+在线a∨观看| 亚洲精品一区中文| 日韩视频一区二区三区在线播放| 99re6这里只有精品| 亚洲激情网址| 亚洲欧美精品在线观看| 久久精品视频在线播放| 国产在线观看一区| 久久久久看片| 欧美激情精品久久久久久大尺度| 最近中文字幕mv在线一区二区三区四区 | 国产亚洲免费的视频看| 欧美欧美天天天天操| 欧美一区二区三区四区高清| 久久精品国产亚洲一区二区| 欧美一区二区精品| 亚洲午夜日本在线观看| 99v久久综合狠狠综合久久| 久久激情一区| 国产精品亚洲综合天堂夜夜| 亚洲免费高清| 老司机午夜免费精品视频| 性伦欧美刺激片在线观看| 久久久五月天| 国产精品成人一区二区三区吃奶| 欧美午夜寂寞影院| 国产精品久久久久久久久免费| 国产一区二区黄色| av成人国产| 欧美aa国产视频| 欧美主播一区二区三区美女 久久精品人| 欧美精品一区在线观看| 一本不卡影院| 亚洲最新视频在线| 国产精品爽爽ⅴa在线观看| 夜夜嗨一区二区| 一区视频在线| 最新亚洲一区| 国产一区二三区| 亚洲高清不卡在线观看| 老牛国产精品一区的观看方式| 亚洲精品久久久久久久久久久久久| 亚洲综合首页| 久久蜜桃香蕉精品一区二区三区| 久久久久国产精品厨房| 亚洲天堂网在线观看| 欧美久久综合| 亚洲精品免费在线观看| 亚洲精品一区二区三区四区高清 | 亚洲伦理自拍| 亚洲人被黑人高潮完整版| 欧美91视频| 亚洲最新视频在线播放| 久久精品一区二区| 亚洲精品乱码视频| 国产精品久久久久久久久久久久| 亚洲男人的天堂在线观看| 裸体一区二区| 一本大道av伊人久久综合| 国产欧美综合在线| 欧美不卡三区| 久久成人在线| av成人国产| 欧美成人免费观看| 欧美一区午夜视频在线观看| 亚洲欧洲在线观看| 国产综合激情| 国产精品久久久久77777| 久久综合国产精品台湾中文娱乐网| 亚洲激情精品| 麻豆国产va免费精品高清在线| 一本一本久久a久久精品综合妖精| 国产午夜亚洲精品羞羞网站| 欧美精品亚洲二区| 久久久天天操| 久久精品盗摄| 午夜一区不卡| 亚洲女人天堂av| 亚洲婷婷综合久久一本伊一区| 最新国产拍偷乱拍精品| 免费毛片一区二区三区久久久| 性欧美video另类hd性玩具| 99视频在线精品国自产拍免费观看 | 欧美3dxxxxhd| 久久久久久久999| 欧美在线观看视频一区二区| 亚洲网友自拍| 亚洲一区二区欧美| 一本大道av伊人久久综合| 在线免费高清一区二区三区| 精品999久久久| 亚洲高清在线精品| 亚洲激情二区| 日韩午夜免费视频| 亚洲午夜成aⅴ人片| 午夜精品久久久久久久99樱桃| 亚洲欧美激情视频| 久久精品国产成人| 暖暖成人免费视频| 亚洲三级视频| 亚洲欧美日韩国产精品| 欧美一区二区成人| 免费成人av在线看| 国产精品v欧美精品v日韩| 国产欧美 在线欧美| 激情久久综合| 一本色道久久综合亚洲精品按摩| 亚洲视频一区| 久久久久久久网站| 亚洲精品乱码久久久久久黑人 | 亚洲综合色网站| 久久香蕉精品| 国产精品嫩草影院一区二区| 黄网站免费久久| 亚洲视频www| 欧美**字幕| 亚洲欧美日韩国产| 欧美精品一区二区精品网| 韩国女主播一区二区三区| 亚洲一级片在线观看| 免费亚洲电影| 欧美怡红院视频| 国产精品一区二区久久久| 黄色工厂这里只有精品| 国产香蕉97碰碰久久人人| 99视频精品| 亚洲高清av| 久久精品99| 国产美女精品一区二区三区| 亚洲精品视频在线观看网站| 久久香蕉国产线看观看av| 在线一区二区三区做爰视频网站| 久久中文欧美| 国内精品伊人久久久久av一坑| 亚洲精品偷拍| 亚洲国产成人tv| 久久这里只有| 亚洲激情一区二区三区| 欧美大色视频| 麻豆精品视频在线观看| 在线观看日韩| 欧美不卡在线视频| 久久久天天操| 亚洲精品综合久久中文字幕| 欧美1区2区| 欧美福利视频一区| 99国产精品99久久久久久粉嫩 |