如果孤独感 发表于 2021-11-20 11:14:47

怎么让数组指针指向二维数组

下面哪里错了?
可以用指针数组指向二维数组吗?如果可以怎么表示

#include <stdio.h>

#define MONTH 12

int main()
{
      float pm[] = {
                {0, 0, 0, 0, 0, 0, 31.3, 35.5, 58.7, 49.7, 49.6, 55.5},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3}
      };
      float (*p) = &pm;
      int i, j, k;

      for (i = 0; i < 36; i++)
      {
                printf("%.2f\n", *(*p + i));
      }


      return 0;
}

jhq999 发表于 2021-11-20 11:57:24

float (*p) = (float(*))pm;

如果孤独感 发表于 2021-11-20 13:03:06

jhq999 发表于 2021-11-20 11:57


能叙述一下原因吗?
还有第二问,顺便解答一下呗,不然又要开贴

如果孤独感 发表于 2021-11-20 13:20:33

本帖最后由 如果孤独感 于 2021-11-20 13:27 编辑

jhq999 发表于 2021-11-20 11:57


而且你这样不是把pm强制变成3个元素为一组的pm吗,而p指向的是pm这个一维数组,而不是整个二维数组
原因:加上 printf("%.2f\n", *(*(p + 2) + 3));
后输出结果是49.70

jhq999 发表于 2021-11-20 14:27:52

本帖最后由 jhq999 于 2021-11-20 14:39 编辑

如果孤独感 发表于 2021-11-20 13:20
而且你这样不是把pm强制变成3个元素为一组的pm吗,而p指向的是pm这个一维数组,而不是整个 ...

而且你看看printf("%.2f\n", *(*(p + 3) ));或者
printf("%.2f\n", p);
的结果,自己瞎搞导致越界
3个元素是+0,+1,+2;+3就是越界

彧未 发表于 2021-11-25 16:46:07

float *(*p) = &pm;
这样就行,但具体是怎么回事我是初学者也不知道

如果孤独感 发表于 2021-11-25 18:17:42

彧未 发表于 2021-11-25 16:46
float *(*p) = &pm;
这样就行,但具体是怎么回事我是初学者也不知道

输出全是0.00

临时用户3.14159 发表于 2021-11-25 20:59:55

第一个问题:数组名本质上就是一个指针 所以第12行的代码直接赋值数组名就行了 不用取址
第二个问题:可以 但没必要 一个指针变量就够了 可以这样进行索引
float* p = pm;
p[(这里填值)][(这里填值)]; //这是二维数组指针的索引方式 跟数组一模一样 理解了数组这个索引方式就懂了


当然 你也可以去学一下汇编 数组的这种索引方式是跟汇编里面的其中一种内存偏移方式是一样的

彧未 发表于 2021-11-27 08:53:02

本帖最后由 彧未 于 2021-11-27 09:09 编辑

如果孤独感 发表于 2021-11-25 18:17
输出全是0.00

抱歉,我的问题,应该是(*p) = pm;这样应该就能正常使用了
我的理解:pm是二维数组(两层),对应的指针(数组指针)也应该是两层,如果&pm那就是三层了,会出现不对照。

如果孤独感 发表于 2021-11-27 10:48:09

彧未 发表于 2021-11-27 08:53
抱歉,我的问题,应该是(*p) = pm;这样应该就能正常使用了
我的理解:pm是二维数组(两层 ...

这样不是只是每个指针指向pm中的元素吗,然后由于地址的连贯性可以编译成功罢了。
而我想知道的是能不能指向整个二维数组pm然后来使用

彧未 发表于 2021-11-27 16:25:24

如果孤独感 发表于 2021-11-27 10:48
这样不是只是每个指针指向pm中的元素吗,然后由于地址的连贯性可以编译成功罢了。
而我想知道的是能 ...

这个是指向数组的首元素地址,至于你说的那种,我也不太清楚。

如果孤独感 发表于 2021-11-27 17:34:20

彧未 发表于 2021-11-27 16:25
这个是指向数组的首元素地址,至于你说的那种,我也不太清楚。

好吧, 谢谢耐心回答

万千只cnm 发表于 2021-11-28 11:08:01

pm是一个指向数组的指针
类型是 float (*)【12】

如果孤独感 发表于 2021-11-28 11:57:18

万千只cnm 发表于 2021-11-28 11:08
pm是一个指向数组的指针
类型是 float (*)【12】

感觉收获了什么可还是写不出来啊,求大神指点

万千只cnm 发表于 2021-11-28 12:04:39

如果孤独感 发表于 2021-11-28 11:57
感觉收获了什么可还是写不出来啊,求大神指点

float (*p) = pm

如果孤独感 发表于 2021-11-28 13:37:20

万千只cnm 发表于 2021-11-28 12:04
float (*p) = pm

如何指向&pm呢?

万千只cnm 发表于 2021-11-28 16:17:46

如果孤独感 发表于 2021-11-28 13:37
如何指向&pm呢?

float (*p) = &pm

如果孤独感 发表于 2021-11-28 19:42:15

万千只cnm 发表于 2021-11-28 16:17
float (*p) = &pm

ok,谢了大佬
页: [1]
查看完整版本: 怎么让数组指针指向二维数组