Программирование на C, путаница с указателем

#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])