2014-08-28 3 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, чтобы создать пространство памяти, на которое может указывать этот указатель. Я прав ?? –

+0

right! ......... –

1
*(int *)p 

Вы derefrencing p, который является указателем, который имеет значение 1. Это вряд ли будет действительным адресом, ошибка сегментации не является неожиданностью.

P.S: p не является указателем на const integer, он имеет значение постоянного целого.

+0

Но я хочу, чтобы напечатать содержимое, которое указывает указатель на. –

+0

@ Yun-LungLee Это недопустимый адрес, вы не можете получить к нему доступ. –

0

p = (int *) 1; не устанавливает указатель p, чтобы указать на ячейку памяти со значением 1. Это устанавливает значение указателя в 1, т. Е. Устанавливает указатель, указывающий на ячейку памяти с адресом 1.

+0

Спасибо. Вы еще раз подумали. –

0

попробовать это:

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

Кажется, не допускается, чтобы указатель указывал на константу. Благодарю. –

+0

Вы правы: это изменение необходимо p = (int *) (&num); – shoham

Смежные вопросы