c - 意外的 C 代码输出

标签 c pointers

这是我的 C 代码:

#include <stdio.h>


int main(){

int x[] = {6,1,2,3,4,5};
int *p=0;
p =&x[0];


while(*p!='\0'){

    printf("%d",*p);
    p++;
}

return 0;


}

运行时输出为 612345-448304448336

减号后的数字是什么?为什么我的代码给出这个数字?

最佳答案

永远不会满足条件 *p != '\0',它与 *p != 0 相同,因为您的数组不包含值 0 的元素,因此您会超出数组边界并进入未定义的行为

相反,您应该直接控制数组范围:

for (int const * p = x; p != x + sizeof(x)/sizeof(x[0]); ++p)  // or "p != x + 6"
{
    printf("%d", *p);
}

关于c - 意外的 C 代码输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648367/

相关文章:

c++ - C++ 中的指针和多维数组

c# - 如何在 C# 中从托管 C++ DLL(使用包装类)获取字符串

c - strcpy to struct 时出现段错误

objective-c - 将 char 传递给 c 中的函数(这本书错了吗?)

c - "const int *ptr=&i"到底是什么意思?为什么它接受非常量地址?

c++ - 将十进制转换为 ASCII

c - 这两个指针声明有什么区别

从文本文件创建链表

c - 在 TIC TAC TOE 游戏中生成下一步 Action 的最快方法

c - 我的无符号短指针返回意外结果。为什么?