gpt4 book ai didi

Char指针存放int类型数据的地址

转载 作者:行者123 更新时间:2023-11-30 16:39:15 26 4
gpt4 key购买 nike

这里的专家我想知道这个程序中到底发生了什么。因为这里的指针是char类型,而var1是integer类型。

#include<stdio.h>
void main()
{
char *ptr;
int var1;
ptr=&var1;
*ptr=495;
printf("\n%d %c",var1,var1);
*ptr='495';
printf("\n%d %c",var1,var1);
}

当我尝试运行这个程序时,这些是我收到的警告-

v.c:6:4: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ptr=&var1;
^
v.c:7:6: warning: overflow in implicit constant conversion [-Woverflow]
*ptr=495;
^
v.c:9:6: warning: multi-character character constant [-Wmultichar]
*ptr='495';
^
v.c:9:6: warning: overflow in implicit constant conversion [-Woverflow]

这个程序的输出是-

239 �

53 5

这里我不明白为什么说数据溢出。

我对程序的分析-

由于指针是字符类型,且char的大小为1字节,因此指针只会指向var1的基地址。因此,存储在 var1 第一个字节中的值将是输出。因为指针无法访问其他 3 个字节。

所以我认为在第一个 printf 中,239 被打印,因为它存储在 var1 的第一个字节中,并且 � 被打印,因为 %c表示 ASCII 值为 495 的字符,这是不可能的。

第二个 printf 495 是一个字符常量。但是到了 53 就打印出了 5。

我不明白。请帮忙。谢谢!

最佳答案

您正在尝试使用字符指针指向整数变量。

指针声明需要知道它要指向哪种数据类型。因为在取消引用它时将需要它。 (要从内存中读取多少字节的数据?)

在这里,您告诉编译器指针指向 1 个字节(字符),但实际上试图指向整数(4 或 2 个字节);因此出现错误。另外,“495”是多字符字符串。

关于Char指针存放int类型数据的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118383/

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