为什么在下面的代码中int * p = 22会给编译时间错误,并且ptr将成功打印该值。为什么可以将字符串指定给C中的字符指针,但不能将整数值指定给整数指针
int main()
{
/*taking a character pointer and assigning a string to it*/
char *ptr = "Stackoverflow" ; //correct
/*taking a int pointer and assigning a string to it*/
int *p = 22 ; //incorrect
printf("%s",ptr); // correct and print
printf("%d",p); //incorrect and give compile time error.
return 0;
}
以及如果我们给一些有效的地址,那么整数指针将采取例如int * ptr = 0xc0563321 –
如果该地址被分配来保存一个'int',那应该在理论上起作用。如果该地址未分配,则程序将崩溃。这就是说,这不是你应该做的或者应该做的。如果您尝试编译该行,您会注意到编译器警告“int *与int间的层次不同”,其中22是int。该警告是有充分理由发出的!你只能通过使用'calloc'或'malloc'或者使用'&'运算符来指定指针。 – Nik
@Vlad有一个很好的解释,为什么'char * ptr =“Stackoverflow”'工作。 – Nik