gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:11 25 4
gpt4 key购买 nike

我目前正在学习C语言编程,今天从指针入手,遇到了如下情况。当我编译程序时

#include<stdio.h>

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

最佳答案

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

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

(int*)p同样有问题,尽管那时损害已经造成。

您可以转换为 void* , 并从 void* 返回原始类型:目前,将这些视为您可以将指针类型转换为不同类型的唯一情况。

关于c - 与引用变量类型不同的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808635/

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