You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针新手求助:如何用指针与函数打印数组存储的实际值

解决C语言指针输出数组实际值的问题

嘿,我来帮你搞定这个指针的小问题!你现在输出的是内存地址,大概率是因为直接打印了指针变量本身,而没有去访问它指向的内存里的实际值。咱们一步步来解决:

问题根源

当你声明一个指向数组的指针(比如int *ptr = arr;),ptr本身存储的是数组第一个元素的内存地址。如果直接打印ptr或者ptr + i,得到的就是对应的地址;要拿到地址里的实际值,得用解引用操作符*。

错误示例(打印地址的情况)

先看看你可能写的类似代码:

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30, 40};
    int *ptr = arr;
    
    for (int i = 0; i < 4; i++) {
        printf("%p\n", ptr + i); // 这里打印的是内存地址
    }
    return 0;
}

正确实现(打印实际值)

只需要对指针做解引用操作,或者用更直观的数组下标语法(本质也是解引用的语法糖):

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30, 40};
    int *ptr = arr;
    // 自动计算数组长度,避免硬编码数字
    int arr_length = sizeof(arr) / sizeof(arr[0]);
    
    for (int i = 0; i < arr_length; i++) {
        // 方法1:用解引用操作符*获取指针指向的值
        printf("数组第%d个元素的值:%d\n", i + 1, *(ptr + i));
        
        // 方法2:用数组下标语法,ptr[i] 和 *(ptr + i) 完全等价
        // printf("数组第%d个元素的值:%d\n", i + 1, ptr[i]);
    }
    
    return 0;
}

关键知识点解释

  • arr是数组名,它本身就等价于指向数组第一个元素的指针,所以int *ptr = arr;让ptr指向数组的首元素。
  • ptr + i会根据指针的类型(这里是int*)自动移动i * sizeof(int)个字节,指向数组的第i个元素。
  • *(ptr + i)就是对这个地址做解引用,取出地址里存储的实际数值。
  • ptr[i]是C语言提供的语法糖,和*(ptr + i)完全一样,写起来更直观,适合刚学指针的朋友。

小提示

打印不同类型的数据要对应正确的格式符:

  • 打印内存地址用%p
  • 打印整数用%d(如果是long类型用%ld,依此类推)

内容的提问来源于stack exchange,提问作者user9373985

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:58:25