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

C语言使用二级指针访问字符串代码运行失败,如何正确实现?

代码错误点排查

  • 指针类型定义错误:你将char*类型变量x的地址赋值给了int*类型的y,类型完全不匹配。要存储char*变量的地址,需要定义对应的二级指针char**,而非int*。
  • 格式化输出参数类型不匹配:printf的%s占位符要求传入字符串首地址(类型为char*),你代码里的*(*y)是两次解引用操作,最终得到的是单个字符,把字符值当作内存地址传给%s会直接触发内存访问错误。

正确实现示例

#include <stdio.h>
int main() {
    char *x = "abc";
    // 定义二级指针存储一级指针x的地址
    char **y = &x;
    
    // 输出完整字符串:仅对二级指针解引用1次,拿到字符串首地址
    printf("完整字符串:%s\n", *y);
    // 输出单个字符:解引用2次拿到对应字符,用%c格式化
    printf("第一个字符:%c\n", **y);
    // 访问字符串其他位置的字符
    printf("第二个字符:%c\n", (*y)[1]);
    printf("第三个字符:%c\n", *(*y + 2));

    return 0;
}

原理说明

  • char** y的含义是:指向char*类型指针的指针,专门用来存储字符指针的内存地址
  • 一次解引用*y得到的是一级指针x存储的值,也就是字符串字面量"abc"的首地址,刚好符合%s的参数要求
  • 两次解引用**y等价于*(*y),是对字符串首地址再做一次解引用,得到首地址对应的单个字符,需要用%c输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:06:07