JeffQury 2024-07-24 01:15 采纳率: 93.3%
浏览 5
已结题

C语言指针数组地址问题

指针数组是存放指针的数组,既然是地址的数组,我定义变量并且取地址放到指针数组里面,打印结果为啥是乱码,反而不取地址却能打印出来?
下面是变量不取地址的指针数组,打印结果为10 20 30


```c
#include<stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int* arr[3] = { a , b , c };
    printf("%d %d %d", arr[0], arr[1], arr[2]);
    return 0;
}

下面是变量取地址的指针数组,打印结果为2030040276 2030040308 2030040340
反而是随机值,这是为什么呢?


```c

#include<stdio.h>

int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int* arr[3] = { &a,&b,&c };
    printf("%d %d %d", arr[0], arr[1], arr[2]);
    return 0;
}
  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-07-24 04:01
    关注

    该回答引用自GPT-3.5, 由博主 GISer Liu 编写:

    问题分析

    用户在使用C语言的指针数组时遇到了打印结果为乱码的问题。具体来说,用户定义了一个指针数组,分别尝试了将变量直接放入数组和将变量的地址放入数组,但打印结果不同。

    关键点

    1. 指针数组的定义和使用:指针数组是存放指针的数组。
    2. 打印指针数组元素的方式:直接打印指针数组元素和通过指针间接打印变量值的区别。

    解决方案

    1. 不取地址的指针数组

    #include<stdio.h>
    int main()
    {
        int a = 10;
        int b = 20;
        int c = 30;
        int* arr[3] = { &a, &b, &c }; // 这里应该是指针数组,存放变量的地址
        printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]); // 通过指针间接访问变量值
        return 0;
    }
    

    解释

    • int* arr[3] = { &a, &b, &c };:定义一个指针数组,存放变量 a, b, c 的地址。
    • printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]);:通过指针间接访问变量值,打印结果为 10 20 30

    2. 取地址的指针数组

    #include<stdio.h>
    int main()
    {
        int a = 10;
        int b = 20;
        int c = 30;
        int* arr[3] = { &a, &b, &c };
        printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]); // 通过指针间接访问变量值
        return 0;
    }
    

    解释

    • int* arr[3] = { &a, &b, &c };:定义一个指针数组,存放变量 a, b, c 的地址。
    • printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]);:通过指针间接访问变量值,打印结果为 10 20 30

    总结

    • 不取地址的指针数组:直接将变量值放入指针数组中,会导致数组元素类型不匹配,从而打印出乱码。
    • 取地址的指针数组:正确地将变量地址放入指针数组中,并通过指针间接访问变量值,可以正确打印出变量值。

    最终代码

    #include<stdio.h>
    int main()
    {
        int a = 10;
        int b = 20;
        int c = 30;
        int* arr[3] = { &a, &b, &c }; // 指针数组,存放变量的地址
        printf("%d %d %d\n", *arr[0], *arr[1], *arr[2]); // 通过指针间接访问变量值
        return 0;
    }
    

    通过上述代码和解释,用户可以理解为什么取地址和不取地址的指针数组在打印结果上会有所不同,并且知道如何正确使用指针数组来存放和访问变量。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月1日
  • 已采纳回答 7月24日
  • 创建了问题 7月24日

悬赏问题

  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼