#c #pointers
#c #указатели
Вопрос:
У меня есть следующий код
char buffer[1024];
void *temp= (void *)(buffer 4);
int *size= (int *)temp;
Я полагаю, что третью строку можно упростить, изменив temp
на buffer
.
Я думал, что одно из следующих будет правильным, но оба выдали мне ошибку (ошибка сегментации).
int *size = (int *)(buffer 4)
или
int *size = (int *)*(buffer 4)
Каков правильный ответ? Указатели меня убивают.
Комментарии:
1.
int *size = (int *)(buffer 4)
Не похоже, что это само по себе вызовет segfault. Что вы пытаетесь сделать с указателем, и почему вы не говорите нам об этом?
Ответ №1:
Запустите этот код без ошибки segfault. Комментарии и распечатка дадут некоторое представление.
int main (void)
{
char buffer[11] = {'f', 'e', 'e', 'd', 't', 'h', 'e', 'b', 'a', 'b', 'e'} ;
printf("Buffer's address in the memory:0x%xn", buffer); //all three are the same
printf("Buffer's address in the memory:0x%xn", amp; buffer); //all three are the same
printf("Buffer's address in the memory:0x%xn", amp; buffer[0]); //all three are the same
unsigned char a;
for (a=0;a<11;a )
printf( "%c", buffer[a]);
void *temp= (void *)(buffer 4);
int * size= (int *)temp;
printf ("ntemp:0x%xn", temp);
printf ("size:0x%xn", size);
printf ("size:%cn", *size);
size = (int *)(buffer 4);
printf ("n(int *)*(buffer 4): 0x%xn",(int *)*(buffer 4));
size = *(char *)(buffer 4);
printf("size:%cn",size); // 't''s ASCII code
printf("size:0x%xn",size); // 't'
}
Ответ №2:
Прошу прощения за путаницу; это была просто ошибка, а не ошибка сегментации.
Я просил помощи в решении проблемы «сложная концепция указателей для начинающих». Ответ был следующим.
int *size = (int *)(amp;buffer[4])