關於C語言指標,打破沙鍋問到底的問題

2022-12-14 14:05:12 字數 4635 閱讀 3765

1樓:匿名使用者

記憶體的地址不像像門牌號似的貼在門上,記憶體就是單純的儲存空間,

所有的地址是人編出來的,便於管理記憶體。

比如有一個地址100001,為了找到這塊地址空間,會6根訊號線(電線)連著記憶體區域,

定址的時候,1對應的線有訊號(有電),0對應的沒有訊號,這樣不同的組合就會選中不同的記憶體塊吧。

也就是說記憶體的地址不是儲存在記憶體裡,而是儲存在人腦裡,並且由電路板實現人的這種定址邏輯

可以看點數字邏輯與計算機組成原理方面的書

再講籠統一點,一片記憶體區域,會有一個選址電路對應,這個電路的責任就是能找到任意一塊記憶體,他有這個功能了,你給他不同的訊號就行了。

2樓:許光豔

c語言由編譯器轉換成組合語言再轉換成機器語言,如果 從組合語言角度講,計算機的每個動作,都是人為精確控制的。cs:ip也是人為給出來的。資料段的地址 也是人為給的。

所以,你把問題想複雜了。有空把龍書 拿出來 翻翻,還有多寫幾行彙編程式

3樓:匿名使用者

理論上指標的指標的...c印象中沒有限制階數。

但實務上指標超過3個( ***ptr),大概就夠讓人眼花了。

關於c語言指標的一個問題如圖,求解釋~

4樓:dear_佩佩

//這樣

bai理解不

int sss(char *s, char *t)//終止時(1) s 指向結尾, t 沒有到結尾, 返回 (*s - *t) 為正數

//終止時(2) s 指向結尾, t 指向結尾, 返回 (*s - *t) 為 0

//終止時(3) s 沒有到結尾, t 指向結尾, 返回 (*s - *t) 為負數

return (*s - *t);}

5樓:檸檬草藍色仰望

應該是三個條件不太清楚吧?

(*s)指的就是指標s不為空,(*t)也是這個意思。

回當兩個

答指標指向的東西都不為空時,才進行比較。

*t++==*s++可以拆成三句話看,

1)比較*t==*s

2)t++

3)s++

比較t和s指向的內容是否相等,然後指標指向下一位,繼續迴圈。當出現兩個指標所指內容不一致時,返回指向內容的差。

可以改成

while((*s)&&(*t))

else}

6樓:document樂園

因為有一個等於的符號 所以是比較大小

關於c語言指標的問題

7樓:

知道p="helloworld"的確切意思嗎?它的意思是「建立一個常字串helloworld,並把第一個字元的地址賦給指標變數p」。既然是「常字串」,它能改變嗎?

8樓:

第一種寫法表示定義一個指向double的指標,a1所指向的內容不允許通過a1去改變,第二種寫法語法上就是錯誤的。

求助一個關於c語言指標的問題

9樓:匿名使用者

首先看你a這個陣列儲存的位置,它屬於區域性變數,那麼儲存在棧中,每一個程序擁有其獨立的棧,你這個程式編譯執行後就是一個程序在跑,它就擁有自己獨立的棧空間,棧就是一段記憶體,由作業系統分配給這個程序的時候它只限定了地址範圍,比如從0x1233----0x2342這塊記憶體都屬於這個程序,至於原來這塊記憶體裡面有什麼內容作業系統是不會管的,就是說它不會有什麼清零之類的操作,

看看這張圖你就能明白了,指標的本質就是一個記憶體地址。正如樓上說的,不同的機器,跑出來這個越界後的值是不同的,甚至執行時刻不同越界地址的值也是不一樣的,因為每次劃分給你的堆疊位置是不同的。如果你想徹底搞清楚指標,建議你從彙編的角度來看問題,從彙編層的角度來看指標簡單明瞭。

10樓:百小度

其實c標準對於函式引數的求值順序是沒有規定的。像在我的機子上win7 vc6出來的結果都是0,自己在程式設計過程中應該避免這個問題,對於同一個變數相關表示式不要重複求值。如果是考試的話,這個,你看看答案怎麼說吧。。。。

碰到的一個指標問題,c語言

11樓:匿名使用者

就你寫的**而言

lastvalue是個野指標,換句話說,他可能指向任意的地址,這當然是錯誤的操作

關於c語言指標的問題! 10

12樓:匿名使用者

因為你的主函式中的呼叫huansu(&a,&b);語句中的實參是傳遞的變數a和變數b的地址,而huansu(int* a,int* b)中形參也是地址,一一對應,形參和實參都指向同一記憶體單元,函式的語句體直接對變數a和變數b的地址交換,也就相當交換了變數a和變數b的值。這實際上就是函式引數的問題吧,看你用函式要做什麼,函式中的引數用什麼。函式中要改變實參的值,而用變數的值作為引數傳遞的話,還有一種方法使用全域性變數,

# include

int a=5,b=6;

void huansu(a,b)

int main (void)

13樓:匿名使用者

這個問題是很多新手不是很理解的。因為我也是這麼過來的。呵呵你的huansu()方法只是改變了 交換引數列表中指標a和b的值。

只是指標交換了。這裡的交換對主方法裡的資料不會產生任何影響。

不要太相信老師的話,也不要太相信課本。相信編譯器就行。

14樓:風簫雨音

我想你的理解可能存在著誤解,這裡值得改變是通過地址的改變來改變值的,就如有兩個人分別拉著著兩條線(線另外一邊固定不變),然後兩個人把手中的線交換了,這時我們再通過固定不變的這一端去找這個人的時候你說會怎麼樣呢,而在這個程式中a,b就是固定不變的這端。

不知道這麼解釋你能不能懂呢

15樓:匿名使用者

是可以執行,但你可以試一下,無論a、b的值是多少,&a和&b的值都是固定的,實際上,這個值是一個記憶體地址,即變數a、b在記憶體中的儲存位置。

有關c語言指標的問題

16樓:匿名使用者

int t = 0;

int *t1 = null;

int a = ;

t為一個變數,t1為指標變數,

a為陣列名(指向第一個元素),a+i(指標)表示指向a[i],即*(a+i) == a[i],或a+i==&a[i];

賦值方法:

要想改變t的值則:t = a[i];或t = *(a+i);

要想改變t1的值則需要給他賦值指標,t1 = a+i;或 t1 = &a[i];這時t1指向的地方改變了,

t1指向a[i]。

要想改變t1所指向地址的值則,*t1 = a[i];或*t1 = *(a+i);

在你的問題中:t應該是 int t = 0;t是個整型變數,需要整型變數賦值給它,t=*(a+i)

表示給t賦值a[i]。*(a+j)=t;類似;

如果真想改為*t=*(a+i);*(a+j)=*t,可以定義t為指標變數;

例如:int t1 = 0;

int *t = &t1 ;

這樣就可以使用*t=*(a+i);*(a+j)=*t,

剛看到你右邊的**,**中的用法絕對是錯的

17樓:飛向夢想飛向未來

你的理解沒問題,關鍵這題你得看t是定義為什麼是int t還是int*t,明白了吧?你的貼圖,明顯看出t是定義為int

幾個關於c語言指標程式的問題:

18樓:匿名使用者

1全部一、原來的字元是abcdefgh\0,在while迴圈結束後應該是bcdefgh \0,*(p-1)=t的意思就是把字元'\0'前面的地址賦值為a,然後就renturn,沒有任何語句要給後面的地址賦值,最終結果就是bcdefgha\0。

二、x和y都是int型,所以*z也是int型,但是之前沒宣告*z,所以填的空應該是對*z的宣告,即int *z.

三、*(s+n)就是字串s的結束符'\0',當原本指向'\0'的指標轉而指向t的首元素地址的時候,s和t是不是就連線起來了呢?

關於c語言指標的問題,希望您幫忙解答一下

19樓:匿名使用者

你的第一個程式沒有實現交換的原因是你的涵數的功能其實是把兩個指標的值進行了交換,它們所指的記憶體空間的內容是沒有改變的,所以說變數a和b的值沒有改變,而第二個程式中由於把陣列的指標傳遞過去,這樣再對其所指的內容進行操作其實就是對原來指標指向的內容進行操作,當然能把以前的內容改變了。至於你說的形參不改變的問題,那只是在傳遞的是值的過程中,形參由於是臨時分配的,所以當返回主函式後就釋放了,所以不會改變,但傳遞的地址就不一樣了,因為對這個地址所指的記憶體的操作是實實在在的,所以會使其發生改變。

20樓:憶晨之愛戀

我看了一下你的程式,第一個主要是因為你的指標用的不到位 !如果你在用指標進行交換著兩個值的時候是用的指標的值 ,記住不是地址,那麼原來的兩個值就會交換。即用另一個函式來寫!

例如:int swap(int *p1,int *p2)

這樣就達到了你的要求 !你不妨去試一下看看 !也許對你會有幫助 !

關於c指標的題,C語言關於指標的一道題。

漫遊靜心 1 定義一個int型二維陣列,會在記憶體中分配一段連續的空間,存放這些數。按照你的定義,是8個數,一個int型是4個位元組,所以你定義的陣列一共佔用了32個位元組,這32個位元組的首地址為 0x0064fd38。2 陣列名是這32位元組的首地址,是一個指標,但是可以理解為被const修飾的...

關於c語言把陣列名賦予指標的問題

就是指向一個地址。陣列第一個元素的地址就是陣列地址。你的理解從本質來 上就有問題自 int p1 a不能通過編譯,因為a是二維陣列指標,型別是int 3 無法轉換到int 型。必須用int p1 3 a或者int p1 a 0 才可以。同理int p2 a 0 無法通過編譯,因為a 0 是一個int...

關於c語言中字串指標變數的問題

樓主你好 字元指標ps賦值後是字串 this is a book 的首地址 也就是說此時ps指向第一個字元 t ps就是 t n 10 ps ps n 就是使指標ps指向字串 this is a book 的第11個字元 也就是 b 那麼printf s n ps 就是輸出以ps為首的 以 0 結束...