2012-07-23 51 views
-8

我有一個考試問題,我給出了以下問題: -解釋p =(char *)66的作用。

什麼是4號線的含義

1 char i , *p; 
2 i=65; 
3 p=&i; 
4 p=(char*)66; 
5 (*p)++; 

可能有人請幫助(在4號線發生什麼?)?

+1

你對它的作用有什麼想法? – 2012-07-23 11:04:17

+9

你現在正在參加考試嗎? :-) – 2012-07-23 11:05:29

+1

將整型轉換爲指針?不用了,謝謝。 – 2012-07-23 11:05:40

回答

2

「66」將轉換爲(字符*)型

3

看一看This tutorial這給指點一些不錯的信息。我不想告訴你它究竟做了什麼,因爲它不會教什麼,而是給你一個鸚鵡時尚的答案,你會被困在這樣的下一個問題。

你想要尋找的區域是鑄造和指針。

1

p=(char*)66;將內存中的地址66轉換爲指針,然後在下一行增加它。按原樣,這段代碼可能不起作用,除非你有權限寫入RAM中的字節66。

1

我固定了第4行以使代碼更加明智。

1 char i , *p; 
2 i=65; 
3 p=&i; 
4 *p=(char)66; 
5 (*p)++; 
  • 在第1行,你有一個char i和字符指針p

  • 在第2行中,i保留值65,即ASCII中的字母'A'。

  • 第3行,p指向地址i

  • 在第4行中,p指向的地址中的值爲66,這是ASCII中的字母B。 由於p指向地址i,因此i的值也爲66

  • 在第5行,即p指向從66增加到67,這使得它在ASCII信C在地址中的值。

如果打印i*p你會得到字母 'C'。

+1

ITYM第4行是'* p =(char)66;' – 2012-07-23 15:58:49

+0

沒錯,修正了它。 – 2012-07-23 17:56:16

1

由於p是一個指針(在本例中爲char),它包含一個地址。第4行簡單地將地址66寫入p。該行執行後,p指向地址66。這是否是一個有效的地址是一個不同的問題。

0

學習一門編程語言時,即學習如何把它大聲說出幫助人們瞭解語言意味着我發現:

所以p = (char *)66;讀我爲「分配66至P」,和其他人所說,(char *)是演員。它正在將(改變類型的)66轉換爲char *,它被稱爲指向char的指針。或者,一個字符變量的地址。

基本上整條線都說「在地址66處,你會找到一個字符」,並將66分配給先前指向i中保存的字符的指針。

使用在這種情況下,星號(*)的,是由這意味着,「在p值是66,它是一個字符值」的路線*p = (char) 66;不同。因此,儘管我們首先查看的路線修改了p中的地址,但第二行修改了已在p中保存的地址的值。

此外,最後一行((*p)++)的意思是:「取p的值,然後加1,不管它是什麼。」

請記住,這些不是這個問題的教科書答案,這是您在回答問題之前對問題的看法。另外,如果這真的是你在測試中給出的代碼,重要的是要注意在現實生活中這樣做是一個壞主意。在第4行和第5行中,您正在修改內存中的一個隨機位置,該位置可能不屬於您的應用程序,這可能(也可能會)導致崩潰和其他令人討厭的事情發生。