问题:C语言中的数组指针问题

img


结果为啥是e啊?不是很懂,p是数组的首元素的地址即,*p之后不应该是首元素吗?加上4怎么会是e呢?

因为是 (*p) + 4 也就是 'a' 的ascii 码 + 4 的那个字符,所以是 e

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7452890
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写C函数,实现双向链表删除一个节点P。
  • 除此之外, 这篇博客: C语言-快速得到模p的平方剩余中的 示例与说明 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 第一列是d,表示平方剩余(二次剩余)
    • 每一行除了第一列以外即为得到该模d的解x
    • 如果某一行除第一列以外全为0,那么说明该剩余d为平方非剩余(二次非剩余)

    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    如果p指针指向的是数组的首元素,那么p即为数组第一个元素的值,计算p+4即为首元素加上4个单位的距离之后的地址所对应的元素的值,也就是数组的第五个元素的值。

    如果想要让p+4的结果是数组中的第五个元素的地址,可以将p强制转换为void类型指针,这样p+4就是指向数组中的第五个元素的地址了。

    代码示例:

    #include <stdio.h>
    
    int main() {
        int arr[] = {1, 2, 3, 4, 5, 6};
        int* p = arr;
        printf("%d\n", *(p+4)); // 数组第五个元素的值为5
        printf("%p\n", (void*)(p+4)); // 数组第五个元素的地址
        return 0;
    }
    

    输出结果:

    5 0x7ffee084c458

    其中,0x7ffee084c458 是数组中第五个元素的地址。注意,在计算数组元素地址时,指针类型的大小影响计算结果,本例中指针类型为int*,即每次加1代表跨越4字节。如果使用不同的数据类型指针,计算结果也会不同。