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

C语言指针数组问题(相关搜索: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;
}
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 01:09
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    解释与示例

    你遇到的问题主要是因为对指针数组的使用方法和打印方式的理解有误。下面我会详细解释并提供修改后的代码示例。

    问题解释

    1. 直接赋值的代码

      • 在这段代码中,你将变量 a, b, c 的值直接赋给了指针数组 arr。由于数组元素是指针类型,这里实际上是将变量的值的地址赋给了指针。
      • 打印时,arr[0], arr[1], arr[2] 实际上是打印了这些地址上存储的值,即变量 a, b, 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;
      }
      
    2. 取地址的代码

      • 在这段代码中,你将变量 a, b, c 的地址赋给了指针数组 arr。这里指针数组的每个元素都存储了一个地址。
      • 打印时,arr[0], arr[1], arr[2] 实际上是打印了这些地址的值,即变量 a, b, 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;
      }
      

    解决方案

    解决方案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", *arr[0], *arr[1], *arr[2]);
        return 0;
    }
    

    解释

    • 使用 * 运算符来解引用指针,获取指针指向的值。
    解决方案2:打印变量的地址

    如果你想打印变量的地址,需要使用 %p 格式化输出,并进行类型转换。

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

    解释

    • 使用 (void*) 强制类型转换,确保地址以正确的格式打印。

    总结

    通过上述代码示例,可以清晰地展示如何正确地使用指针数组来打印变量的值或地址。希望这些解释和示例能帮助你更好地理解指针数组的使用方法。

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月24日
  • 已采纳回答 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 文本提炼