c語(yǔ)言包含 指針變量存放的是內(nèi)存地址,那為什么指針還要定義類型?
指針變量存放的是內(nèi)存地址,那為什么指針還要定義類型?指針定義類型用于值和指針操作。1、指針的本質(zhì)是內(nèi)存地址。無(wú)論是哪種類型的指針,其本質(zhì)都是內(nèi)存地址。2、定義指針類型,更方便取值。無(wú)論定義什么指針或保
指針變量存放的是內(nèi)存地址,那為什么指針還要定義類型?
指針定義類型用于值和指針操作。
1、指針的本質(zhì)是內(nèi)存地址。無(wú)論是哪種類型的指針,其本質(zhì)都是內(nèi)存地址。
2、定義指針類型,更方便取值。無(wú)論定義什么指針或保存什么地址,目的都不是獲取地址值,而是訪問地址上的數(shù)據(jù)。定義指針類型,您可以輕松地獲取數(shù)據(jù)。如果指針P type是long*,那么當(dāng)使用*P值時(shí),取P值地址處的4個(gè)連續(xù)字節(jié)的數(shù)據(jù)值。如果P類型是char*,那么使用*P是地址P處的一個(gè)字節(jié)的數(shù)據(jù)。
3、定義指針類型以便于指針操作。使用指針,最常見的操作就是移動(dòng)指針,即加減法。通過(guò)指針加減,可以方便地訪問相鄰或間接相鄰的同類單元。對(duì)于相同的p1,不同指針移動(dòng)的實(shí)際內(nèi)存字節(jié)數(shù)不同,其值為sizeof。也就是說(shuō),對(duì)于*PP n類型,實(shí)際偏移地址值是sizeof(type)*n.
C的指針變量可存放任何類型變量的地址嗎?
存儲(chǔ)地址的變量稱為指針變量。指針變量是一個(gè)特殊變量,它不同于一般變量。常規(guī)變量存儲(chǔ)數(shù)據(jù)本身,而指針變量存儲(chǔ)數(shù)據(jù)的地址。
假設(shè)程序中聲明了int類型的變量,其值為68。系統(tǒng)為變量a分配的第一個(gè)地址是0x65fdf4h,PA是存儲(chǔ)變量a地址的指針變量,即PA中存儲(chǔ)的值是0x065fdf4h
訪問變量a有兩種方式:一種是直接根據(jù)0x065fdf4h的地址找到a的存儲(chǔ)單元,從而訪問變量a;另一種是另一種是根據(jù)系統(tǒng)為PA分配的地址找到PA,然后根據(jù)PA的值找到內(nèi)存中變量a的存儲(chǔ)單元(即變量a的地址為0x065fdf4h),從而訪問變量a,前者稱為直接訪問,后者稱為間接訪問。
如果指針變量存儲(chǔ)對(duì)象的地址,則表示指針變量指向?qū)ο蟆T贑編程中,指針變量只有在指向時(shí)才有意義。
1. 定義指針變量的一般形式如下:
類型名稱*指針變量名稱1,*指針變量名稱2,。。。*指針變量名n
2。Null pointer
Null pointer是一個(gè)值為0的特殊指針。在C語(yǔ)言中,null(在stdio中定義)。H) 用于表示空值并確保該值不是任何變量的地址。空指針賦值對(duì)于任何指針類型都是合法的。指針值為空的指針變量表示它目前沒有指向任何有意義的對(duì)象。
3. void pointer
(void*)類型的指針稱為通用指針,它可以指向任何變量。C語(yǔ)言允許將任何變量的地址作為指針直接賦給通用指針。但是,應(yīng)該注意void*不能指向const修改的變量。EG const int test void*PTV PTV=&test的第三句是非法的。只有在上面的第三句中聲明PTV為const void*PTV(PTV=&test)才是合法的。
當(dāng)操作中需要使用常規(guī)指針指示的數(shù)據(jù)時(shí),應(yīng)該寫入類型轉(zhuǎn)換。例如,由一般指針PTV指示的空間的數(shù)據(jù)是整數(shù)數(shù)據(jù),而P是整數(shù)指針。使用此表達(dá)式轉(zhuǎn)換:P=(int*)PTV