C语言使用指针访问结构体内嵌数组 如何输出目标字符而非内存地址
问题根因
- 格式符使用错误:最后一行打印语句使用了地址输出格式符
%p,字符输出需要使用%c格式符。 - 表达式计算结果类型错误:
(arr_struct+1)->arr+1是指向数组第二个元素的指针,不是元素本身,需要对指针解引用才能拿到存储的字符值。
修复方案
把main函数里最后一行printf语句修改为以下任意一种写法即可:
- 数组下标写法(可读性更高):
printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]);
- 指针运算写法(和原代码逻辑对齐):
printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],*((arr_struct+1)->arr+1));
修复后完整代码
#include <stdio.h> #include <stdlib.h> void int_array(int *arr) { *arr=10; *(arr+1)=20; } struct struct_ex { int i; char arr[5]; }; void struct_array(struct struct_ex *arr) { arr->i=10; arr->arr[0]='a'; arr->arr[1]='b'; (arr+1)->i=20; (arr+1)->arr[0]='c'; (arr+1)->arr[1]='d'; } int main() { int *arr=malloc(sizeof(int)*2); int_array(arr); printf("%d %d\n",*arr,*(arr+1)); struct struct_ex *arr_struct=malloc(sizeof(struct struct_ex)*2); struct_array(arr_struct); printf("- %d %c,%c\n",arr_struct->i,arr_struct->arr[0],arr_struct->arr[1]); printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]); // 已修改行 printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]); return 0; }
运行输出
10 20 - 10 a,b - 20 c,d - 20 c,d
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

