c語(yǔ)言指針例題及詳解
- 夕逆IT
- 開發(fā)語(yǔ)言
- 2024-11-29
- 1
大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下c語(yǔ)言指針例題及詳解的問(wèn)題,以及和c語(yǔ)言指針用法簡(jiǎn)單舉例的一些困惑,大家要是還不太明白的話,也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享,希...
大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下c語(yǔ)言指針例題及詳解的問(wèn)題,以及和c語(yǔ)言指針用法簡(jiǎn)單舉例的一些困惑,大家要是還不太明白的話,也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享,希望可以幫助到大家,解決大家的問(wèn)題,下面就開始吧!
文章目錄:
- 1、C語(yǔ)言指針問(wèn)題
- 2、c語(yǔ)言指針問(wèn)題解答?
- 3、三道C語(yǔ)言題目,求大神(用指針的方法)。
- 4、c語(yǔ)言指針問(wèn)題,求解答
- 5、C語(yǔ)言指針問(wèn)題【精粹+附圖】
C語(yǔ)言指針問(wèn)題
1、在C語(yǔ)言中,指針的賦值是通過(guò)將變量的賦給指針變量來(lái)實(shí)現(xiàn)的。指針的基本概念 在C語(yǔ)言中,指針是一個(gè)變量,其特殊之處在于它存儲(chǔ)的是其他變量的,而不是值本身。指針使我們能夠間接地訪問(wèn)和修改變量的值。指針的賦值過(guò)程 當(dāng)我們?yōu)橹羔樧兞抠x值時(shí),實(shí)際上是將其指向一個(gè)變量的內(nèi)存賦給它。
2、假如 P 是指針 那么 *p 就代表變量。 而&a是, *p=&a 就是把給變量,當(dāng)然不正確了,因?yàn)橹荒芙o指針。p2,*p1都是變量,變量之間互相賦值是正確的。
3、分析:程序沒(méi)有正確區(qū)分?jǐn)?shù)組和指針。在C語(yǔ)言中,當(dāng)把字符串常量賦予指針時(shí),該字 符串常量就存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中。此時(shí)數(shù)據(jù)不能用指針修改,應(yīng)用數(shù)組的方式進(jìn)行修改。
4、比如我們定義一個(gè)int型指針變量。int *p=NULL;初值為空。那么當(dāng)while(p);時(shí),只有p==NULL時(shí),while循環(huán)才會(huì)結(jié)束。所以如果我們寫while(p);printf。。;那么只有當(dāng)p為空時(shí),后面的printf才會(huì)。否則就一直循環(huán),這樣我們就能斷p為空了。同理!p,自然就能斷p不為空了。
c語(yǔ)言指針問(wèn)題解答?
如有定義char y[4]= 321則表達(dá)式 *y+2的值是5 。分析:y是字符串?dāng)?shù)組首元素3的,*y的值就是字符3,再加上2,就是字符5(也可以說(shuō)是字符5的ASC碼值)。 如有定義char z[2][4]={MAT, LAB};,則表達(dá)式*(*z+2)的值是 T。
指針?biāo)赶虻膬?nèi)存區(qū)就是從指針的值所代表的那個(gè)內(nèi)存開始,長(zhǎng)度為sizeof(指針?biāo)赶虻念愋停┑囊黄瑑?nèi)存區(qū)。以后,我們說(shuō)一個(gè)指針的值是XX,就相當(dāng)于說(shuō)該指針指向了以XX為首的一片內(nèi)存區(qū)域;我們說(shuō)一個(gè)指針指向了某塊內(nèi)存區(qū)域,就相當(dāng)于說(shuō)該指針的值是這塊內(nèi)存區(qū)域的首。
假如 P 是指針 那么 *p 就代表變量。 而&a是, *p=&a 就是把給變量,當(dāng)然不正確了,因?yàn)橹荒芙o指針。p2,*p1都是變量,變量之間互相賦值是正確的。
++(*pointer)是先取值,再自增,當(dāng)前pointer指向的是位置arr[3],取值后是2,*pointer的結(jié)果是2,2再自增,當(dāng)然會(huì)得出3。值得說(shuō)明的是,這個(gè)括號(hào)是可以省略的,此處括號(hào)只起到增加程序可讀性的作用。(2)*(pointer-2)是先移動(dòng)指針,再取值。
三道C語(yǔ)言題目,求大神(用指針的方法)。
D選項(xiàng),*x本身就錯(cuò)誤,因?yàn)閤是int類型,沒(méi)法使用*操作符。A之所以錯(cuò)是因?yàn)榇a中有一句q=NULL,也就是說(shuō)q是一個(gè)空指針了,你再向里面寫東西就錯(cuò)了,而且你在vc0中可以試一下,馬上會(huì)出現(xiàn)一條0xc000 0005的寫異常。是的,你不管給它賦值多少都是4的。
所以就是6 22 s[0]~s[5]分別為0(s[0]未初始化,初始值要看編譯器對(duì)未初始局部變量處理方式而定),C,D,E,F(xiàn),G,fun函數(shù)就是從G開始往前找到E,取E的下標(biāo) 5 就如上面所說(shuō),sum是一個(gè)未初始化局部變量,一般來(lái)說(shuō)初始值是函數(shù)??臻g中未定義的值,除非有些編譯器會(huì)進(jìn)行代碼優(yōu)化。
char* ss = 0123456789;要求這種字符串的長(zhǎng)度是不能用sizeof的,如果用sizeof它計(jì)算出來(lái)的會(huì)是這個(gè)指針的長(zhǎng)度,在32下,指針一般都是4個(gè)字節(jié),所以,結(jié)果是4。計(jì)算字符串的長(zhǎng)度,可以使用庫(kù)函數(shù)strlen來(lái)計(jì)算,它計(jì)算出來(lái)的長(zhǎng)度不包含字符串結(jié)束符\0。
int *a;表示聲明一個(gè)指針變量a,注意a的值是個(gè),不是值,這樣才表示一個(gè)值(前提是a確實(shí)指向一個(gè)值,不然的話,會(huì)是一個(gè)隨機(jī)數(shù)):*a,int a=10,*b=表示的是把a(bǔ)的給指針變量b。
void fun(char *a,char *b){ a=b; // b覆蓋了a的原值,也就是b和a都是指向同一個(gè)地方,存貯a的地方 (*a)++; //a指向的內(nèi)容加1,a變b。
P++,P向后指一位,指向a[1];(P++),++在后,所以先取*P的值1,取完后P再向后指一位;(++P),++在前,P先向后指一位,指向a[1],再取a[1]的值2;(*P)++,先取*P的值1,取完后*P的值再+1。
c語(yǔ)言指針問(wèn)題,求解答
1、A、D定義為:A 定義指向函數(shù)的指針pf,所指向的函數(shù)參數(shù)為空,無(wú)返回值 D 定義指向函數(shù)的指針pf,函數(shù)參數(shù)為int,char型(不符題意,題目為int,char*),無(wú)返回值 B、D的定義為:定義函數(shù)pf,函數(shù)參數(shù)為空,返回類型為void *(void 型指針)單從函數(shù)指針的定義可排除BCD。
2、比大小的邏輯是:在第二個(gè)for循環(huán)中,循環(huán)條件是p=*q+i,即p所指向的小于等于當(dāng)前行的第i個(gè)元素的。因?yàn)樵谶@個(gè)循環(huán)中,我們只需要輸出當(dāng)前行的前i個(gè)元素,所以循環(huán)條件要限制在這個(gè)范圍內(nèi)。注意,這里的p和q都是指針變量,所以它們指向的是,而不是數(shù)組元素的值。
3、D選項(xiàng),*x本身就錯(cuò)誤,因?yàn)閤是int類型,沒(méi)法使用*操作符。A之所以錯(cuò)是因?yàn)榇a中有一句q=NULL,也就是說(shuō)q是一個(gè)空指針了,你再向里面寫東西就錯(cuò)了,而且你在vc0中可以試一下,馬上會(huì)出現(xiàn)一條0xc000 0005的寫異常。是的,你不管給它賦值多少都是4的。
C語(yǔ)言指針問(wèn)題【精粹+附圖】
字符串”0ABCDEF“在內(nèi)存中的存儲(chǔ)格式,如下圖所示,當(dāng)調(diào)用fun函數(shù)時(shí),語(yǔ)句*p=s,表示將s指向的內(nèi)存賦給了指針p,此時(shí)指針p和s都指向了堆棧頂部的 0000 0001。
C語(yǔ)言里面的指針和數(shù)組是很有趣的。例如定義數(shù)組a[10],你可以通過(guò)a[1]訪問(wèn)里面的元素,也可以通過(guò)*(a+1),來(lái)訪問(wèn)。為什么這里可以這樣用呢?ptr的類型為(int *),所以ptr在內(nèi)存里面存放的就是int類型的指針,指向了某個(gè)int。
圖中1處指針p沒(méi)有初始化,它沒(méi)有指向任何內(nèi)存單元不能進(jìn)行圖中2處的賦值寫入操作,這里會(huì)程序崩潰退出。
指針?lè)ň褪峭ㄟ^(guò)指針運(yùn)算來(lái)訪問(wèn)數(shù)組元素。指針是可以運(yùn)算的!指針的運(yùn)算分為加法和減法,注意和普通的數(shù)字加減法有很大的區(qū)別:指針的本質(zhì)是一個(gè)內(nèi)存,內(nèi)存可以簡(jiǎn)單的認(rèn)為是一整塊空間,是從內(nèi)存0開始連續(xù)的整數(shù)。
如有定義char y[4]= 321則表達(dá)式 *y+2的值是5 。分析:y是字符串?dāng)?shù)組首元素3的,*y的值就是字符3,再加上2,就是字符5(也可以說(shuō)是字符5的ASC碼值)。 如有定義char z[2][4]={MAT, LAB};,則表達(dá)式*(*z+2)的值是 T。
對(duì)于*P1=*P2 操作之前,一定要先將P1和p2先指向變量。還有*p=3之前,也要先把p指向一個(gè)變量。指針就是一個(gè)指向的變量,使用之前需要先給它賦值,也就是先將將一個(gè)變量的賦值給它,這個(gè)時(shí)候指針里面存的就是這個(gè)變量的。
關(guān)于c語(yǔ)言指針例題及詳解到此分享完畢,希望能幫助到您。
本文鏈接:http:///kaifa/228765.html