循环中数组指针是否自动换行?文件指针区间打印代码问题咨询
关于指针行为与代码问题的解答
嘿,咱们一步步来拆解你的两个问题:
问题1:循环中数组的指针会自动跳转到下一行吗?
绝对不会。指针本质上就是一个存储内存地址的变量,它本身没有“自动移动”的能力——只有你手动修改指针的值(比如用pointer++、pointer += n这类操作),它才会指向新的内存位置。
举个例子,如果你在循环里只是读取*pointer的值,但从不改变pointer本身,那它会一直死死盯着最初指向的那个数组元素/内存地址,根本不会动。
问题2:指针遇到换行符或空字符时会自动跳到下一行吗?代码会有什么错误?
同样不会。指针完全不知道什么是“换行符”或者“空字符”,它只认内存地址。想要让指针跳过这些字符,你得自己写逻辑判断(比如检查*pointer是否为'\n'或'\0',然后手动移动指针)。
再看你贴的这段代码:
int m=row_ew[pick_ew]; /* m等于2,即……的第一个元素的地址 */
这里存在严重的类型不匹配问题:
- 注释里说
row_ew[pick_ew]是一个地址(指针),那它的类型应该是char*或者其他指针类型;但你把它赋值给了int类型的变量m。 - 这会导致两个关键问题:
- 编译器大概率会抛出警告(甚至直接报错,取决于你的编译标准),因为不同类型的变量直接赋值是不安全的;
- 如果你的系统是64位的,指针的宽度是8字节,而
int通常是4字节——这会导致地址被截断,m里存的只是原地址的低4字节,完全不是正确的内存地址了; - 后续如果你想用
m来访问内存,会因为地址错误触发非法内存访问,轻则程序输出乱码,重则直接崩溃。
正确的做法应该是把m的类型改成对应的指针类型,比如:
char* m = row_ew[pick_ew];
内容的提问来源于stack exchange,提问作者user8753900
相关产品推荐
相关产品推荐

