2014-08-28 35 views
0

我嘗試用C使用指針來恆定整數:如何在C中指向一個常量整數?

void *p = NULL; 
p = (int *) 1; 
printf("p=%d\n", *(int *)p); 

,但我得到了一個段故障.....

我無法弄清楚如何一個指向C的恆溫號碼沒有聲明一個變量。

回答

2

您沒有將指針指向常量,而是將常量轉換爲指針。你應該這樣做:

const int one = 1; 
const int *p; 
p = &one; 

但是,您不能這樣做:

p = &1; 

因爲字面常量沒有一個內存位置。

+0

我明白了。我必須聲明一個const變量來創建該指針可指向的內存空間。我對嗎 ?? – 2014-08-28 13:25:37

+0

對!......... – 2014-08-28 13:37:25

1
*(int *)p 

你derefrencing p,這是有1值的指針。這不太可能是一個有效的地址,分段錯誤並不意外。

P.S:p不是指向const整數的指針,它的值是一個常量整數。

+0

但我要打印的內容,指針指向。 – 2014-08-28 13:17:31

+0

@ Yun-LungLee這是一個無效的地址,你無法訪問它。 – 2014-08-28 13:19:24

0

p = (int *) 1;未設置指針p指向值爲1的內存位置。這將指針的值設置爲1,即將指針設置爲指向地址爲1的內存位置。

+0

謝謝。你給我另一個想法。 – 2014-08-28 13:29:03

0

試試這個:

void *p = NULL; 
const int num = 1; 
p = (int*)(&num); 
printf("p=%d\n", *((int *)p)); 
+0

看來不允許指針直接指向一個常量。謝謝。 – 2014-08-28 13:32:52

+0

你是對的:這個改變是需要的p =(int *)(&num); – shoham 2014-08-28 13:42:30

相關問題