2013-12-08 175 views
0

我寫了一個測試程序,這些指令:ç指針引用

char *p; 

然後

p="gibberish"; 

去然後再打印數p作爲如下

printf("%s\n", p); 

,我得到了 「胡言亂語」由於p地址沒有初始化,我感到驚訝;運行代碼時我期待錯誤,但我沒有...請解釋任何問題?

此外,當使用帶指針的結構作爲其字段時,例如

struct dummy 
{ 
int *m; 
.... 
} 

我怎樣才能取消引用一個虛擬變量dvm?我試過dv.m,它確實工作,雖然我期待dv.(*m);請任何解釋?

+0

這應該是兩個問題,其中每個問題都會成爲問題,因爲C上的任何教科書都會回答它們。 –

+0

要訪問結構中的指針,可以使用'* dv.m'或'dv.m [0]'或類似的東西; 'dv.m'就是指針。在'.'或' - >'之後,你總是有一個成員名字(一個簡單的標識符,儘管如果編碼器足夠反常並且不被代碼審查員控制,它可以用括號括起來)。 –

+2

「,我得到了」亂碼「,讓我感到吃驚,因爲p地址沒有初始化」 - 呵呵......你覺得'p =「亂碼」;'是嗎? – 2013-12-08 08:22:18

回答

4

對於第一個問題,行p="gibberish"p初始化爲指向字符串"gibberish"的第一個字符。

對於第二個問題,假設dv的類型爲struct dummy而不是struct dummy *的類型,則您希望*(dv.m)遵守該指針。

+0

謝謝,因爲不斷的「亂碼」是char *本身 – user2005893

0

這也是初始化:

int main() 
{ 
    int t=3; 
    int* p; 
    p=&t; /* intitialization */ 
} 
0

指針變量以及,

和「廢話」是一個字符串(關於它的研究), 你在做什麼在這裏

p="gibberish"; 

正在取文字串的地址並分配給p指針

*第二個問題

哪裏做點東西

struct dummy dv; 
int i =2; 
dv.m=&i; 
printf("%i",*dv.m); 

第一指針,你必須創造一些指向,然後將其分配到指針

dv.m=&i; 

和然後引用指針 printf(「%i」,* dv.m);