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

C语言打印数组指针问题:自定义函数调用无输出的求助

问题分析与修复方案

咱们来拆解下你这段代码的问题核心:参数类型不匹配导致内存访问错误,所以函数调用后没有输出。

问题根源

你定义的str是一个char*类型的数组,它的本质类型是char**(指向指针的指针)。但你写的printArr函数参数是char* arr,这俩类型完全不兼容。当你把str传给printArr时,编译器会做隐式类型转换,但在函数内部执行*(arr+index)时,实际访问的内存地址是错误的,自然读不到正确的字符串内容。

而你注释掉的printf(*(str+1));能正常运行,是因为str本身是char**类型,str+1指向数组的第二个元素,解引用后得到的是char*类型的字符串指针,完全符合printf的要求。

修复方案

这里给你两种靠谱的修复方式:

方案1:修改函数参数类型(推荐)

把printArr的第二个参数改成char** arr,让它和str的类型匹配,这样就能正确访问数组里的字符串了:

#include <stdio.h>
#include <string.h>
void printArr(int index, char **arr);
char *str[] = {"heyyo","help"};
int main() {
    printArr(1, str); 
    return 0;
}
void printArr(int index, char **arr){
    printf("%s", *(arr+index)); // 建议加上%s格式符,编程更规范
}

方案2:调用时强制类型转换(不推荐)

如果不想修改函数参数,也可以在调用时把str强制转换成char*,但这种方式不够直观,容易埋下隐患,不建议常用:

printArr(1, (char*)str);

另外补充个小细节:使用printf输出字符串时,最好明确写上%s格式说明符,虽然有些情况下直接传字符串指针也能运行,但明确格式符是更严谨的编程习惯哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:41:11