如何定位指针数组中的字符指针?指针反转字符数组报错求助
问题解决:字符数组指针反转的错误修复
1. 类型不匹配错误的修复
你遇到的cannot convert 'char (*)[5]' to 'char*'错误,是因为&name的类型是指向长度为5的char数组的指针(char (*)[5]),而你要赋值给的p是指向单个char的指针(char*),两者类型不兼容。
正确的初始化方式是直接用数组名:
char *p = name;
数组名name在表达式中会自动退化为指向数组第一个元素的指针,类型正好是char*,和p匹配。
2. 输入只读取2个值的问题解决
当你去掉&后,输入时只读取2个值就执行反转,是因为scanf("%c", p)会读取输入中的空白字符(包括回车、空格)。比如你输入第一个字符后按回车,回车会被当作第二个字符被读取,导致后续循环读取到的都是空白,看起来像只读取了2个值。
修复方法是在%c前加一个空格,让scanf自动跳过所有空白字符:
scanf(" %c", p);
3. 完整修复后的代码
#include <stdio.h> int main() { char name[5]; char *p = name; // 正确初始化指针 int i; printf("Enter the array: "); for(i = 0; i < 5; i++) { scanf(" %c", p); // 加空格跳过空白字符 p++; } p--; // 此时p指向最后一个元素的下一位,先减1回到最后一个元素 for(i = 0; i < 5; i++) { printf("%c", *p); p--; } printf("\n"); // 输出换行,让结果更整洁 return 0; }
额外说明
- 反转循环中,第一个
p--是必要的:因为第一个循环结束后,p已经指向数组第5个元素的下一位(数组索引从0到4,共5个元素),所以需要先减1才能指向最后一个有效元素。 - 如果输入时不想逐个输入字符,也可以用
scanf("%s", name)直接读取字符串,但要注意数组长度(这里name长度为5,最多读取4个字符加结束符'\0'),不过你的需求是读取5个字符,所以逐个读取更合适。
内容的提问来源于stack exchange,提问作者Nishu Patel
相关产品推荐
相关产品推荐

