当前位置:  开发笔记 > 编程语言 > 正文

指针与引用变量的类型不同

如何解决《指针与引用变量的类型不同》经验,为你挑选了1个好方法。

我目前正在学习如何用C语言编程.今天我开始使用指针,我遇到了以下情况.当我编译程序时

#include

int main() {

    int a;
    double * p;
    p = &a;
    *p = 12.34;
    printf("%d\n",a);
    * (int *) p = 12.34;
    printf("%d\n",a);

    return 0;
}

它说

$ gcc zeigertypen.c 
zeigertypen.c: In function ‘main’:
zeigertypen.c:7:7: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]

并在执行时,我得到输出

2061584302
Speicherzugriffsfehler (Speicherabzug geschrieben)

错误消息是德语之类的

memory access error (core dumped)

但是,如果我注释掉该行,*p = 12.34;则错误消失并且输出为

0
12

代码的目的是演示与它们引用的变量不同类型的指针的问题.根据我用来学习C++的教科书,输出应该是

2061584302
12

Bathsheba.. 5

行为p = &a;实际上是未定义的.

C和C++都不允许您将&a(指向int)的类型重新解释为指向a的指针double.

(int*)p 同样存在问题,尽管那时已经造成了损害.

您可以从以下位置强制转换void*为原始类型void*:现在,将这些视为唯一可以将指针类型强制转换为其他类型的情况.



1> Bathsheba..:

行为p = &a;实际上是未定义的.

C和C++都不允许您将&a(指向int)的类型重新解释为指向a的指针double.

(int*)p 同样存在问题,尽管那时已经造成了损害.

您可以从以下位置强制转换void*为原始类型void*:现在,将这些视为唯一可以将指针类型强制转换为其他类型的情况.


绝对.如果你写的话,编译器保留吃猫的权利.(最可能发生的是*p在你的指针`p`之后的'a`之后摧毁了内存.在你的系统中,`double`可能是比`int`更大的类型.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有