C编程,关于指针的困惑

时间:2014-07-06 01:52:49

标签: c pointers

我有以下代码

char buffer[1024];  
void *temp= (void *)(buffer + 4);
int *size= (int *)temp;

我相信通过将temp更改为buffer可以简化第三行。 我认为以下其中一项是正确的,但两者都给了我一个错误(分段错误)。

int *size = (int *)(buffer + 4)

int *size = (int *)*(buffer + 4)

答案是正确的?指针杀了我。

2 个答案:

答案 0 :(得分:0)

运行此代码时没有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%x\n", buffer); //all three are the same
 printf("Buffer's address in the memory:0x%x\n", & buffer); //all three are the same
 printf("Buffer's address in the memory:0x%x\n", & 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%x\n", temp);
 printf ("size:0x%x\n", size);
 printf ("size:%c\n", *size); 

 size    = (int *)(buffer + 4);




 printf ("\n(int *)*(buffer + 4): 0x%x\n",(int *)*(buffer + 4));
 size  = *(char *)(buffer + 4);
 printf("size:%c\n",size); // 't''s ASCII code
 printf("size:0x%x\n",size); // 't'
}

答案 1 :(得分:0)

我为这种困惑道歉;这只是一个错误,而不是分段错误。 我正在寻求帮助来解决初学者的复杂指针概念。问题。以下是答案。

int *size = (int *)(&buffer[4])