c 指针和数组

标签 c arrays pointers

#include <stdlib.h>
#include <stdio.h>

int main (void)
{
    int a[] = {1,2,3,4,5};
    int b[] = {0,0,0,0,0};
    int *p = b;

    for (int i =0; i < 5; i++)
    {
        b[i] = a[i]+1;
        *p = a[i]+1;
        p++;
    }
    for (int i = 0; i < 5; i++)
    {
        printf (" %i \t %i \t %i \n", *p++, b[i], a[i]);
    }
    return 0;
}

对于这段代码,我明白了为什么 a 和 b 的输出但是为什么指针具有相同的 a 值?

*p 是 b[0] = a[0]+1,不是吗? 所以 p++ 表示 b 的下一个地址,所以它是 b[1]=a[1]+1。

ie 
*p  b  a
1  2  1
2  3  2
3  4  3
4  5  4
5  6  5

最佳答案

您遇到了未定义的行为。在第一个循环结束时,p 指向 b 的“one past the end”。在不重置它的情况下,您取消引用它并继续递增它,这两者都会导致未定义的行为

可能是在您的实现中,数组a 紧跟在数组b 之后,而p已经开始指向数组 a。这将是一种可能的“未定义”行为。

关于c 指针和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224892/

相关文章:

c - 关于C指针的两个问题

c - C 中的图形实现

c - 标准 C 和 C++ 库中的 malloc 函数插入

c - 在 C 语言中用于 RSA 解密的 OpenSSL EVP api 的 EVP_OpenInit() 中出现错误

java - 打印范围,如果缺少数字

合并数组中的全部元素并将其存储在索引 0 中

c - 尝试创建一个对数组中所有值进行平方的函数。最后一个值出现奇怪的数字

c++ - clion 调试器在一步后停止工作

c - C 上的返回矩阵

c++ - C++ 中的指针和函数