gpt4 book ai didi

c - 为什么可以将字符串分配给C中的字符指针,但不能将整数值分配给整数指针

转载 作者:行者123 更新时间:2023-12-02 14:33:44 24 4
gpt4 key购买 nike

为什么在下面的代码中 int *p = 22 会给出编译时错误,而 ptr 会成功打印该值。

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;
}

最佳答案

如果您有一个字符数组,例如

char s[] = "Stackoverflow";

然后将表达式中使用的数组指示符转换为指向其第一个元素的指针。所以你可以写

char *ptr = s;

指针ptr现在指向数组s的第一个字符。

C 中的字符串文字也像字符数组一样表示,并像字符数组一样存储在内存中,并具有静态存储持续时间。

例如,字符串文字 "Stackoverflow" 的类型为 char[14](包括终止零)。

那么你就这样写

char *ptr = "Stackoverflow";

那么这个语句其实也是一样的如果会有

static char unnamed[] = "Stackoverflow";
char *ptr = unnamed;

至于这个说法

int *p = 22 ;

那么整数文字不会转换为指向自身的指针。它实际上代表数字 22,仅此而已。

因此编译器会发出一条消息,因为如果您希望指针确实包含整数值 22,那么您必须使用强制转换。

表达式

22 == 22

总是产生true

虽然这个表达式

"Stackoverflow" == "Stackoverflow"

不一定会产生true,因为根据编译器选项,编译器可以将重合的字符串文字放置在不同的内存区域中。在此表达式中,比较的是指向字符串文字的第一个字符的指针。

请考虑到,如果要输出指针指向的整数对象,则需要使用取消引用。所以无论如何而不是

printf("%d",p); 

你应该写

printf("%d", *p); 

或者,如果您想输出存储在指针中的值,则必须使用其他格式说明符

printf("%p", p); 

关于c - 为什么可以将字符串分配给C中的字符指针,但不能将整数值分配给整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com