gpt4 book ai didi

c - 在 C 中访问数组

转载 作者:行者123 更新时间:2023-12-05 01:27:18 25 4
gpt4 key购买 nike

关于 C 中二维数组的几个问题。

  1. 如果我创建一个二维数组:

    int c[5][25];

    然后创建一个指向数组开头的指针:

    int *p = c;

    编辑:将第二行更改为:

    int (*p)[25] = c;

    成功了。这是否仍允许我在以下问题中访问数组?

  2. *(c+26) 会访问位于 c[1][1] 的数组吗?

    我知道像下面这样的一维数组:

    double *p;
    double balance[10];

    p = balance;

    *(balance + 4)balance[4] 相同,但不确定是否为 2D 分配内存“背靠背”数组。

  3. 你能通过类似c[2][-24]的方式访问c[1][1]吗?

    这将是一种奇怪的方式,但我找不到任何解决该特定场景的方法。

  4. 您能否通过语句 p[1][1] 访问 c[1][1]

    我猜不会,因为 p 是一个指针数组。

  5. 前段时间看到这些例子,记下来了,不记得对不对了:

    1[c[1]];
    26[p];

    这两个是否等同于 c[1][1]

我知道其中很多内容都是非常基础的,但我无法在线找到解决这些特定实例的资源。

谢谢!

最佳答案

问: 1.) 我是否正确声明了第二行?

答:不,你没有。正确的方法是:

int (*p)[25] = c;

问: 2.) 会 *(c+26)c[1][1] 访问数组?

答:编号*(c+26)c[26] 相同.在您的情况下,它会导致未定义的行为,因为数组索引 26对您的数组无效。

问: 3.) 你能访问c[1][1]吗?通过做类似 c[2][-24] 的事情?

答:不,你不能。使用超出范围的数组索引将导致未定义的行为。

编辑尽管-24似乎是越界数组索引,使用 c[2][-24]似乎与使用 c[1][1] 相同.我收回我的第一个答案。

问: 4.) 你能访问c[1][1]吗?通过声明p[1][1]

答:是的,如果你改变p的声明就可以了以我的方式做到这一点。

问: 1[c[1]];26[p];

它们中的任何一个都等同于 c[1][1] 吗?

A 1[c[1]]相当于c[1][1] . 26[p]相当于p[26]但它不等于 c[1][1]不管是否p以你的方式或我的方式定义。

关于c - 在 C 中访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com