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

时间:2017-11-05 05:10:21

标签: c pointers

这里的专家我想知道这个程序实际发生了什么。因为这里指针是char类型,var1是整数类型。

#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的字符,它不是& #39;可能。

在第二printf中,495是一个字符常量。但是印刷了53和5。

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

1 个答案:

答案 0 :(得分:0)

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

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

在这里,您告诉编译器指针指向1个字节(char)并且实际上尝试指向整数(4或2个字节);因此错误。此外,&#39; 495&#39;是多字符串。