c - 什么时候允许类型转换指针?

标签 c pointers casting

我正在备考,我收到的示例问题之一如下:

“以下哪个表达式分配给 new_val(表达式将替换 HERE)时将打印 7?”选择所有适用项:

float m = 7.0
int *a = (int *) &m;

int new_val = HERE;
printf("%d\n", new_val);

(a) *(int *) &m

(b) *a

(c) (int) 米

(d) 以上都不是。


答案只有(c)

我已经在我自己的机器上运行了这个程序,我发现的结果与答案一致。但是,我想知道有人怎么能得出这个答案?更一般地说,我无法理解有关类型转换指针的规则。我已经阅读了 StackOverflow 上的其他几篇文章,它们对我帮助不大。

我想知道是否有人可以帮助阐明我如何解决与此类似的问题。

最佳答案

但是使用

int new_val = (int)m;

忽略上一行中使用 int* a = ...

所做的一切

所以您只是将原始 float m 转换回 int。

编辑 尝试以下操作:


#include "stdio.h"

int main(int argc, char** argv) {
    float m = 7.1;
    int new_val = (int)m;
    printf("%d\n", new_val);

}

关于c - 什么时候允许类型转换指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57138059/

相关文章:

c - 使用 fread 附加到缓冲区

java - 类型安全: Unchecked cast from Integer to T

c - 二维数组分配问题(段错误)

c - (堆栈 :7229): Gdk-CRITICAL **: 11:09:22. 221:gdk_window_get_origin:断言 'GDK_IS_WINDOW (window)' 失败

c - C 中的文件处理

c++ - 如何在 C++ 中将指向基类的指针分配给派生类的对象?

c - 使用 C 或 Opencv 获取文件路径

c - 在 C 中使用指针算法访问二维数组元素

pointers - 将指针保存到 golang 中的 String 数据结构中

android - LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, 这个);尝试转换为 com.google.android.gms.location.LocationListener)