【问题标题】:How does pointer declaration and definition work for pointers?指针声明和定义如何对指针起作用?
【发布时间】:2020-05-05 18:04:24
【问题描述】:

对于以下代码spinet:

#include <stdio.h>

int main(void) {
    int x = 12345678;
    char *a = x;

    printf("%d\n", x);

    printf("%d\n %d\n %d\n %d\n", a[0], a[1], a[2], a[3]);

    return 0;
}

GNU GCC v7.1.1 的输出: timeout:被监控的命令转储核心 sh: line 1: 11792 Segmentation fault timeout 10s main

请注意以下工作:

#include <stdio.h>

int main(void) {
    int x = 12345678;
    char *a;
    *a = x;

    printf("%d\n", x);

    printf("%d\n %d\n %d\n %d\n", a[0], a[1], a[2], a[3]);
    return 0;
}

【问题讨论】:

  • @Vishal gupta 这两个程序都有未定义的行为。
  • 你应该检查指针到引用和指向引用的概念。

标签: c pointers


【解决方案1】:

这些都不对。

在这两种情况下,您都将整数值分配给指针。然后将该值视为有效的内存位置并取消引用。但它不是一个有效的内存位置,所以你调用undefined behavior

在第一种情况下,UB 表现为崩溃,而在第二种情况下,它表现为似乎正常工作。

您需要做的是将x地址 分配给a。然后你可以读取组成int的字节。

char *a = (char *)&x;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2018-11-11
    • 2020-04-03
    相关资源
    最近更新 更多