“一道試題引發(fā)的血案 - 林世霖的技術(shù)博客 - CSDN博客int *ptr2=(int *)((int)a+1);” 的更多相關(guān)文章
-
當(dāng)然是緊挨著的下一個(gè)具有4個(gè)整型變量的數(shù)組了(因?yàn)?amp;a的類型是指向具有4個(gè)整型變量的數(shù)組的指針嘛),,于是a的指向了4的下一個(gè)地址,,在用此值初始化ptr1,,因此ptr1的指向如圖所示: 由于在ptr1初始化的時(shí)候,令&a+1強(qiáng)制轉(zhuǎn)換成整型指針(關(guān)于類型轉(zhuǎn)換的詳細(xì)討論請(qǐng)參考http://blog.csdn.net/seton040/archive/2009/10/19/4699869.aspx),,因此ptr1[-1]相當(dāng)于把ptr1往前挪一個(gè)整型大小,,即4個(gè)字節(jié)。
函數(shù)指針和指針函數(shù)以及函數(shù)指針數(shù)組 1,、指針函數(shù): 指針函數(shù)是指帶指針的函數(shù),,即本質(zhì)是一個(gè)函數(shù)。例如,, int func(int x); /* 聲明一個(gè)函數(shù) */ int (*f) (int x); /* 聲明一個(gè)函數(shù)指針 */ f=func; /* 將func函數(shù)的首地址賦給指針f */ 賦值時(shí)函數(shù)func不帶括號(hào),,也不帶參數(shù),由于func代表函數(shù)的首地址,,因此經(jīng)過(guò)賦值以后,,指針f就指向函數(shù)func(x)的代碼的首地址。
數(shù)組指針與指針數(shù)組的區(qū)別,。那么把數(shù)組名作為該數(shù)組類型的一個(gè)具體變量,,我們就可以定義指向這個(gè)變量的指針,即數(shù)組指針,。數(shù)組指針與指針數(shù)概念渾淆 ptr=arr; 同上 type pa=&(new int[10]); 沒(méi)見(jiàn)過(guò) type pc=&(pb=new int[10]); 數(shù)組指針指針數(shù)組概念渾淆 --------------------------------------------------------------- 指針指向類型不同的,,說(shuō)白了就是相鄰的兩個(gè)指針的之間的距離因?yàn)橹羔樀念愋筒煌兴灰粯拥摹?/div>
const int a;int const a;int const * const a;舉個(gè)例子:const void *vectortable[N]如果把const當(dāng)作非類型限定符的話,按照觀點(diǎn)3來(lái)分析,,vectortable是一個(gè)數(shù)組,,const由于是非類型限定符,所以是修飾 vectortable的,,于是vectortable是一個(gè)指向數(shù)組的常量指針,,數(shù)組元素的類型是void *。事實(shí)上不是這樣,,const是類型限定符,,修飾變量vectortable的類型的,這樣vectortable是一個(gè)指向數(shù)組的指針,,數(shù)組元素類型 是const void *,。
typedef和define具體的詳細(xì)區(qū)別#define a b 是吧a 定義b typedef b a 要倒過(guò)來(lái)。#define int_ptr int *作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說(shuō) ,,#define在預(yù)處理 時(shí)進(jìn)行簡(jiǎn)單的替換,,而typedef不是簡(jiǎn)單替換 ,而是采用如同定義變量的方法那樣來(lái)聲明一種類型,。typedef int* int_ptr;pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改而const PINT p 是const int * p 鎖的是指針p所指的對(duì)象,。
給字符指針賦字符串并不是將一個(gè)長(zhǎng)長(zhǎng)的字符串存于字符指針變量中,而是將字符串常量存儲(chǔ)于常量區(qū),,并將存儲(chǔ)這個(gè)字符串的首字節(jié)地址賦給指針變量,,讓指針變量指向字符率常量的首字符。",,其中的ptr是( ) ①10個(gè)指向整型變量的指針 ②指向10個(gè)整型變量的函數(shù)指針 ③一個(gè)指向具有10個(gè)元素的一維數(shù)組的指針 ④具有10個(gè)指針元素的一維數(shù)組 【解】代碼"int(*ptr)[10],;定義變量p是指針,它能指向一個(gè)整型變量,。
我們通常從教科書上看到這樣的說(shuō)明:delete 釋放new分配的單個(gè)對(duì)象指針指向的內(nèi)存delete[] 釋放new分配的對(duì)象數(shù)組指針指向的內(nèi)存那么,,按照教科書的理解,我們看下下面的代碼:int *a = new int[10];delete a; //方式1delete [] a; //方式2肯定會(huì)有很多人說(shuō)方式1肯定存在內(nèi)存泄漏,,是這樣嗎,?
不吃透這些東東,就不要說(shuō)會(huì)c語(yǔ)言
指針 數(shù)組指針數(shù)組 一個(gè)數(shù)組,,若其元素均為指針類型數(shù)據(jù),,稱為指針數(shù)組。一維指針數(shù)組的定義形式為:類型名 *數(shù)組名[數(shù)組長(zhǎng)度] 例如: int *p[4] 由于[]比*優(yōu)先級(jí)更高,,因此p先與[4]結(jié)合,,形成p[4]的形式,這顯然是數(shù)組形式,。數(shù)組指針 數(shù)組指針是指向數(shù)組的一個(gè)指針,,如 int (*p)[4] 表示一個(gè)指向4個(gè)元素的數(shù)組的一個(gè)指針。
函數(shù)指針&指針函數(shù)函數(shù)指針是指向函數(shù)的指針,,指針函數(shù)還是指一個(gè)函數(shù)的返回值是一個(gè)指針(1) float(**def)[10] def是什么,?a后既然有[ ],那么a是數(shù)組,,而且是包含3個(gè)元素的數(shù)組,。雖然數(shù)組a只含有a[0]、a[1],、a[2]三個(gè)元素,,a[3]實(shí)際上已經(jīng)越界,但在分析數(shù)組a的元素的類型時(shí),,我們正好需要形式上的元素a[3],。是指針,,因?yàn)樗那懊嬗?. 由此可知,數(shù)組a的元素是指針,。即數(shù)組a的元素是指向函數(shù)的指針,。
函數(shù)指針函數(shù)指針。應(yīng)該是這樣的: 1.定義函數(shù)指針類型: typedef int (*fun_ptr)(int,int); 2.申明變量,,賦值: fun_ptr max_func=max; 也就是說(shuō),賦給函數(shù)指針的函數(shù)應(yīng)該和函數(shù)指針?biāo)傅暮瘮?shù)原型是一致的,。main()函數(shù)中調(diào)用find()函數(shù),,將score數(shù)組的首地址傳給pointer. 2,"函數(shù)指針"是指向函數(shù)的指針變量,因而"函數(shù)指針"本身首先應(yīng)是指針變量,,只不過(guò)該指針變量指向函數(shù),。
好了 ,在這里我們可以這樣定義指針 :指針是一類包含了其他變量或函數(shù)的地址的變量 ,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存的地址 .1.2 指針的內(nèi)容 簡(jiǎn)單講 ,指針有四個(gè)方面的內(nèi)容 :即指針的類型 ,指針?biāo)赶虻念愋?,指針的值 ,指針本身所 占有的內(nèi)存區(qū) .下面我們將分別闡述這些內(nèi)容 .1.2.1 指針的類型 從語(yǔ)法的角度看,,指針的類型是指把指針聲明語(yǔ)句中的指針名字去掉所剩下的部分??罩羔樖怯蓪?duì)指針變量賦予 0值而得到的,。
指針數(shù)組,數(shù)組指針,以及函數(shù)指針,以及堆中的分配規(guī)則zhuzhu @ 2005-10-21 15:02別人做的歸納,系統(tǒng)多了~~ 一 :關(guān)于指針和堆的內(nèi)存分配 先來(lái)介紹一下指針 : 指針一種類型,,理論上來(lái)說(shuō)它包含其他變量的地址,,因此有的書上也叫它:地址變量。p代表了一個(gè)指向二級(jí)指針的指針,,在它申請(qǐng)空間的時(shí)候要注意指針的類型,,那就是int (*)代表二級(jí)指針,而int (**)顧名思義就是代表指向二級(jí)指針的指針了,。(3)指針的指針,;
例七: char*arr[20]; char**parr=arr;//如果把a(bǔ)rr看作指針的話,arr也是指針表達(dá)式 char*str; str=*parr;//*parr是指針表達(dá)式 str=*(parr+1);//*(parr+1)是指針表達(dá)式 str=*(parr+2);//*(parr+2)是指針表達(dá)式 由于指針表達(dá)式的結(jié)果是一個(gè)指針,,所以指針表達(dá)式也具有指針?biāo)哂械乃膫€(gè)要素:指針的類型,,指針?biāo)赶虻念愋停羔樦赶虻膬?nèi)存區(qū),,指針自身占據(jù)的內(nèi)存,。數(shù)組和指針的關(guān)系 數(shù)組的數(shù)組名其實(shí)可以看作一個(gè)指針。
下面的例子演示了把一個(gè)指針的值當(dāng)作一個(gè)整數(shù)取出來(lái),,然后再把這個(gè)整數(shù)當(dāng)作一個(gè)地址賦給一個(gè)指針: 例十六: inta=123,b; int*ptr=&a; char*str; b=(int)ptr;//把指針ptr的值當(dāng)作一個(gè)整數(shù)取出來(lái),。指針ptr是一個(gè)int*類型的指針,它指向的類型是int,。在指針的強(qiáng)制類型轉(zhuǎn)換:ptr1=(TYPE*)ptr2中,,如果sizeof(ptr2的類型)大于sizeof(ptr1的類型),,那么在使用指針ptr1來(lái)訪問(wèn)ptr2所指向的存儲(chǔ)區(qū)時(shí)是安全的。
轉(zhuǎn)貼:C++指針詳細(xì)解析——史上最精彩指針文章 百度空間_應(yīng)用平臺(tái),。//*ptr和&b都是指針表達(dá)式,。//如果把a(bǔ)rr看作指針的話,arr也是指針表達(dá)式 char *str; str=*parr; //*parr是指針表達(dá)式 str=*(parr+1);//*(parr+1)是指針表達(dá)式 str=*(parr+2);//* (parr+2)是指針表達(dá)式 由于指針表達(dá)式的結(jié)果是一個(gè)指針,,所以指針表達(dá)式也具有指針?biāo)哂械乃膫€(gè)要素:指針的類型,,指針?biāo)赶虻念愋停羔樦赶虻膬?nèi)存區(qū),,指針自身占據(jù)的內(nèi)存,。
主要是遵循一個(gè)原則,只要本函數(shù)內(nèi)沒(méi)有定義的變量就用全局變量(而不是main里的),,全局變量和局部變量重名時(shí)局部變量起作用,,當(dāng)然還要注意靜態(tài)與自動(dòng)變量的區(qū)別。首先要知道,,指針變量的值(即指針變量中存放的值)是指針(即地址),。指針變量定義形式中:基本類型 *指針變量名 中的"*"代表的是這是一個(gè)指向該基本類型的指針變量,而不是內(nèi)容的意思,。指針變量常用的用途還有把指針作為參數(shù)傳遞給其他函數(shù),,即 指向函數(shù)的指針 。
int foo ( int x , int n) {(a) 函數(shù)的指針,,該函數(shù)以 兩個(gè)指向浮點(diǎn)數(shù)(float)的指針(pointer)作為參數(shù)(arguments) Pointer to function of having two arguments that is pointer to float(b) 整型(c) 函數(shù)的指針,,該函數(shù)以 兩個(gè)指向浮點(diǎn)數(shù)(float)的指針(pointer)作為參數(shù)(arguments),并且函數(shù)的返回值類型是整型 Pointer to function having two argument that is pointer to float and return int(d) 以上都不是。
解答:str1,str2,str3,str4是數(shù)組變量,,它們有各自的內(nèi)存空間,;而str5,str6,str7,str8是指針,它們指向相同的常量區(qū)域,。cout <<"str字符長(zhǎng)度為: "<<sizeof(str)/sizeof(str[0]) <<endl; UpperCase( str ); cout <<str <<endl;int (*s[10])(int) 函數(shù)指針數(shù)組,,每個(gè)指針指向一個(gè)int func(int param)的函數(shù)。/*str是一個(gè)數(shù)組指針,,即指向數(shù)組的指針.*/ char *str[20]; /*str是一個(gè)指針數(shù)組,,其元素為指針型數(shù)據(jù).*/
mxArray是一種很復(fù)雜的數(shù)據(jù)結(jié)構(gòu),與Matlab中的array相對(duì)應(yīng),,我們只需熟悉Matlab的array類型和幾個(gè)常用的mxArray函數(shù)即可,。int mxGetM(const mxArray *array_ptr);const int *mxGetDimensions(const mxArray *array_ptr);例如可以用函數(shù)engGetVariable從Matlab工作空間讀入mxArray類型的數(shù)組,然后用mxGetPr和mxGetPi獲得數(shù)據(jù)指針,,對(duì)并其中的數(shù)據(jù)進(jìn)行處理,,最后調(diào)用engPutVariable函數(shù)將修改后的數(shù)組重新寫入到Matlab工作空間。
typedef和define詳細(xì)區(qū)別轉(zhuǎn)載一: 1) #define是預(yù)處理指令,,在編譯預(yù)處理時(shí)進(jìn)行簡(jiǎn)單的替換,,不作正確性檢查,,不關(guān)含義是否正確照樣帶入,只有在編譯已被展開(kāi)的源程序時(shí)才會(huì)發(fā)現(xiàn)可能的錯(cuò)誤并報(bào)錯(cuò),。在C/C++語(yǔ)言中,,typedef常用來(lái)定義一個(gè)標(biāo)識(shí)符及關(guān)鍵字的別名,它是語(yǔ)言編譯過(guò)程的一部分,,但它并不實(shí)際分配內(nèi)存空間,,實(shí)例像: typedef int INT; typedef int ARRAY[10]; typedef (int*) pINT;
typedef作為類型定義關(guān)鍵字,用于在原有數(shù)據(jù)類型(包括基本類型,、構(gòu)造類型和指針等)的基礎(chǔ)上,,由用戶自定義新的類型名稱。將INT32定義為與int具有相同意義的名字,,這樣類型INT32就可用于類型聲明和類型轉(zhuǎn)換了,,它和類型int完全相同,。由于有了"#define ptr_to_char char*",,因此"ptr_to_char pch1, pch2"可以展開(kāi)為。char *pch1;由此可見(jiàn),,只是將pch1定義為指針變量,,卻并沒(méi)有實(shí)現(xiàn)程序員的意圖,而是將pch2定義成了char型變量,。
結(jié)果是:0 0 1 1解答:str1,str2,str3,str4是數(shù)組變量,,它們有各自的內(nèi)存空間;而str5,str6,str7,str8是指針,,它們指向相同的常量區(qū)域,。++i ) if( ""a""<=str[i] &&str[i]<=""z"" ) str[i] -= (""a""-""A"" );cout <<"str字符長(zhǎng)度為: "<<sizeof(str)/sizeof(str[0]) <<endl;UpperCase( str );cout <<str <<endl;/*str是一個(gè)數(shù)組指針,即指向數(shù)組的指針.*/char *str[20];/*str是一個(gè)指針數(shù)組,,其元素為指針型數(shù)據(jù).*/
通過(guò)以上總結(jié),,無(wú)論怎樣定義p都是一指針如果const在*左邊,表示該指針指向的變量是不可變的如果const在*右邊,,表示該指針本身是不可變得五,、Volatile 關(guān)鍵字volatile有什么含意 并給出三個(gè)不同的例子。這段代碼的目的是用來(lái)返指針*ptr指向值的平方,,但是,,由于*ptr指向一個(gè)volatile型參數(shù),編譯器將產(chǎn)生類似下面的代碼: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; }
a) 一個(gè)整型數(shù)(An integer) b)一個(gè)指向整型數(shù)的指針( A pointer to an integer) c)一個(gè)指向指針的的指針,,它指向的指針是指向一個(gè)整型數(shù)( A pointer to a pointer to an intege)r d)一個(gè)有10個(gè)整型數(shù)的數(shù)組( An array of 10 integers) e) 一個(gè)有10個(gè)指針的數(shù)組,,該指針是指向一個(gè)整型數(shù)的。最后一個(gè)意味著a是一個(gè)指向常整型數(shù)的常指針(也就是說(shuō),,指針 指向的整型數(shù)是不可修改的,,同時(shí)指針也是不可修改的),。
[C易]char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc";const char* str6 = "abc";cout <<boolalpha <<( str1==str2 ) <<endl; // 輸出什么?[C++易]unsigned int const size1 = 2;char str1[ size1 ];unsigned int temp = 0;cin >>temp;unsigned int const size2 = temp
關(guān)鍵字const有什么含意,?去年Dan Saks已經(jīng)在他的文章里完全概括了const的所有用法,,因此ESP(譯者:Embedded Systems Programming)的每一位讀者應(yīng)該非常熟悉const能做什么和不能做什么.如果你從沒(méi)有讀到那篇文章,只要能說(shuō)出const意味著"只讀"就可以了,。const int a;int const * a const;(當(dāng)然,,懂得用const的程序員很少會(huì)留下的垃圾讓別人來(lái)清理的。) ; 通過(guò)給優(yōu)化器一些附加的信息,,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼,。
const int a;int const * a const;第四個(gè)意思a是一個(gè)指向整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是可以修改的,,但指針是不可修改的),。3). 下面的函數(shù)有什么錯(cuò)誤:int square(volatile int *ptr){這段代碼的目的是用來(lái)返指針*ptr指向值的平方,但是,,由于*ptr指向一個(gè)volatile型參數(shù),,編譯器將產(chǎn)生類似下面的代碼:int square(volatile int *ptr){典型的類似代碼如下:int *ptr;ptr = (int *)0x67a9;*ptr = 0xaa55;
Const和volatile的使用。如果將一個(gè)變量定義為 volatile 則相當(dāng)于告訴編譯器該變量可能隨時(shí)被改變,,例如被操作系統(tǒng)或硬件所改變,。int square(volatile int *ptr){這段代碼的目的是用來(lái)返指針*ptr指向值的平方,但是,,由于*ptr指向一個(gè)volatile型參數(shù),,編譯器優(yōu)化代碼后將產(chǎn)生上表右邊的代碼。const int a;int const * a const;即使不用關(guān)鍵字 const,,也還是能很容易寫出功能正確的程序,,那么我為什么還要如此看重關(guān)鍵字const呢?
5. 用變量a給出下面的定義a) 一個(gè)整型數(shù)(An integer)b)一個(gè)指向整型數(shù)的指針( A pointer to an integer)c)一個(gè)指向指針的的指針,,它指向的指針是指向一個(gè)整型數(shù)( A pointer to a pointer to an intege)rd)一個(gè)有10個(gè)整型數(shù)的數(shù)組( An array of 10 integers)e) 一個(gè)有10個(gè)指針的數(shù)組,,該指針是指向一個(gè)整型數(shù)的。int const * a const;典型的類似代碼如下: int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55;
C語(yǔ)言學(xué)習(xí)教程第六章-指針(8)2. 指針的運(yùn)算(1)取地址運(yùn)算符&:求變量的地址(2)取內(nèi)容運(yùn)算符*:表示指針?biāo)傅淖兞?3)賦值運(yùn)算.把變量地址賦予指針變量.同類型指針變量相互賦值.把數(shù)組,,字符串的首地址賦予指針變量.把函數(shù)入口地址賦予指針變量(4)加減運(yùn)算對(duì)指向數(shù)組,,字符串的指針變量可以進(jìn)行加減運(yùn)算,如p+n,p-n,p++,p--等,。因此a是一個(gè)函數(shù)指針變量,,該函數(shù)返回的一個(gè)指針值又指向一個(gè)指針數(shù)組,該指針數(shù)組的元素指向整型量,。
一,、類型指針的定義 二、無(wú)類型指針的定義 三,、指針的解除引用 四,、取地址(指針賦值) 五,、指針運(yùn)算 六、動(dòng)態(tài)內(nèi)存分配 七,、字符數(shù)組的運(yùn)算 八,、函數(shù)指針。在 C 中,,可以對(duì)指針進(jìn)行移動(dòng)的運(yùn)算,,如: char a[20]; char *ptr=a; ptr++; ptr+=2; 當(dāng)執(zhí)行ptr++;時(shí),編譯器會(huì)產(chǎn)生讓ptr前進(jìn)sizeof(char)步長(zhǎng)的代碼,,之后,,ptr將指向a[1]。
Pascal中的指針運(yùn)算指南(與C比較)_delphi吧_貼吧Pascal中的指針運(yùn)算指南(與C比較)以下內(nèi)容分為八部分,,分別是 一,、類型指針的定義 二、無(wú)類型指針的定義 三,、指針的解除引用 四,、取地址(指針賦值) 五、指針運(yùn)算 六,、動(dòng)態(tài)內(nèi)存分配 七,、字符數(shù)組的運(yùn)算 八,、函數(shù)指針,。對(duì)于指向特定類型的指針,在c中是這樣定義的: int *ptr; char *ptr; 與之等價(jià)的object pascal是如何定義的呢,?int *ptr, *ptr2;ptr2 = ptr;ptr2 := ptr;
聲明函數(shù)指針并實(shí)現(xiàn)回調(diào)作者:Danny Kalev.盡管定義的語(yǔ)法有點(diǎn)不可思議,,但如果你熟悉函數(shù)聲明的一般方法,便會(huì)發(fā)現(xiàn)函數(shù)指針的聲明與函數(shù)聲明非常類似?,F(xiàn)在可以將p傳遞給另一個(gè)函數(shù)(調(diào)用者)- caller(),,它將調(diào)用p指向的函數(shù),而此函數(shù)名是未知的:/* 調(diào)用ptr指向的函數(shù) */ }如果賦了不同的值給p(不同函數(shù)地址),,那么調(diào)用者將調(diào)用不同地址的函數(shù),。// 調(diào)用函數(shù)以函數(shù)指針為參數(shù)void caller( __cdecl int(*ptr)(int));
指針函數(shù)和函數(shù)指針有什么區(qū)別
http://sagitta./sagitta/1096690.html
聲明函數(shù)指針并實(shí)現(xiàn)回調(diào) 程序員常常需要實(shí)現(xiàn)回調(diào)。聲明函數(shù)指針,。盡管定義的語(yǔ)法有點(diǎn)不可思議,,但如果你熟悉函數(shù)聲明的一般方法,便會(huì)發(fā)現(xiàn)函數(shù)指針的聲明與函數(shù)聲明非常類似,。p是指向某函數(shù)的指針,,該函數(shù)無(wú)輸入?yún)?shù),返回值的類型為void?,F(xiàn)在可以將p傳遞給另一個(gè)函數(shù)(調(diào)用者)- caller(),,它將調(diào)用p指向的函數(shù),,而此函數(shù)名是未知的:// 調(diào)用函數(shù)以函數(shù)指針為參數(shù)void caller( __cdecl int(*ptr)(int));
指針數(shù)組 數(shù)組指針指針數(shù)組 一個(gè)數(shù)組,若其元素均為指針類型數(shù)據(jù),,稱為指針數(shù)組,。一維指針數(shù)組的定義形式為:類型名 *數(shù)組名[數(shù)組長(zhǎng)度] 例如: int *p[4] 由于[]比*優(yōu)先級(jí)更高,因此p先與[4]結(jié)合,,形成p[4]的形式,,這顯然是數(shù)組形式。指針數(shù)組也可以用作函數(shù)參數(shù) 數(shù)組指針 一:指針數(shù)組:數(shù)組名本身就是一個(gè)指針,,指向數(shù)組的首地址,。
指針數(shù)組和數(shù)組指針的區(qū)別(轉(zhuǎn))所以數(shù)組指針也稱指向一維數(shù)組的指針,亦稱行指針,。指針數(shù)組定義 int *p[n];[]優(yōu)先級(jí)高,,先與p結(jié)合成為一個(gè)數(shù)組,再由int*說(shuō)明這是一個(gè)整型指針數(shù)組,,它有n個(gè)指針類型的數(shù)組元素,。這樣兩者的區(qū)別就豁然開(kāi)朗了,數(shù)組指針只是一個(gè)指針變量,,似乎是C語(yǔ)言里專門用來(lái)指向二維數(shù)組的,,它占有內(nèi)存中一個(gè)指針的存儲(chǔ)空間。指針數(shù)組是多個(gè)指針變量,,以數(shù)組形式存在內(nèi)存當(dāng)中,,占有多個(gè)指針的存儲(chǔ)空間。
然后是: i = (int)&(ptr[1]); 這就是說(shuō),,將ptr作為一個(gè)指向字符串的指針,,這里ptr[1]就相當(dāng)于*(ptr + 1),因?yàn)閿?shù)組名其實(shí)就是地址,,所以ptr[1]與*(ptr + 1)等價(jià)(有疑問(wèn)的請(qǐng)參考"The C Programming Language, by Kernigham &Ritchie"),。i的初始值為0,轉(zhuǎn)換成指針后指向了內(nèi)存0,,沒(méi)關(guān)系,,相當(dāng)于NULL,加1后指向了1,,不巧有個(gè)黑客發(fā)現(xiàn)了這段代碼,,并得到了這個(gè)指針,然后......你就等著哭吧,,老兄,!
二.引用:你可以擁有引用,但編譯器僅擁有指針(地址)看過(guò)了第一條,你一定對(duì)編譯器的工作有了一定的了解,,實(shí)際上編譯器就是程序員與底層之間的一個(gè)轉(zhuǎn)換層,,它把一個(gè)高級(jí)語(yǔ)言代碼轉(zhuǎn)換為低級(jí)語(yǔ)言代碼,一個(gè)編譯器完成的轉(zhuǎn)換跨度越大,,那么它也就會(huì)越復(fù)雜,,因?yàn)槌绦騿T的工作都由他代為完成了。不管你相不相信,,請(qǐng)看下面這段代碼:int& b=a;lea eax,[a];mov dword ptr[b],eax;把a(bǔ)的地址賦給地址為b的一塊內(nèi)存,。
|
|
來(lái)自: fjc_Embeded > 《C/C》