我是扬帆起航 发表于 2022-10-11 21:01:59

这个哪里错了

# include <stdio.h>
int main ()
{
        int a={1,2,3,4,5,6,7,8,9};
        int *p=a;
        printf("%d\n",*(a));
        printf("%d\n",*(a+1));
        printf("%d\n",*(a+2));
       
        return 0;
}

jackz007 发表于 2022-10-11 21:18:56

本帖最后由 jackz007 于 2022-10-11 21:27 编辑

#include <stdio.h>
int main ()
{
      int a={1,2,3,4,5,6,7,8,9}   ;
      int (* p) = a                  ;
      printf("%d\n", * (* p))         ; // a
      printf("%d\n", * (* (p + 1) + 1)) ; // a
      printf("%d\n", * (* (p + 2) + 2)) ; // a
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
1
5
9

D:\\C>

我是扬帆起航 发表于 2022-10-11 21:30:47

为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?

jackz007 发表于 2022-10-11 22:42:14

本帖最后由 jackz007 于 2022-10-11 22:53 编辑

我是扬帆起航 发表于 2022-10-11 21:30
为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?

       提问最好以回帖(用鼠标点击楼层下方的 "回复" 按钮)的方式贴出信息,否则,我无法收到论坛的提醒,得主动翻你的帖子才能看到新的提问。
       2 楼的代码第 5 行不是赋首地址了吗?
       不妨就本例的数据,进行举例说明,你到底想要什么样的效果?

我是扬帆起航 发表于 2022-10-12 00:02:38

jackz007 发表于 2022-10-11 22:42
提问最好以回帖(用鼠标点击楼层下方的 "回复" 按钮)的方式贴出信息,否则,我无法收到论坛的 ...

这个 int *p=a是错的,不知道为啥

howzyao 发表于 2022-10-12 00:24:43

我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥

这个 int *p=a是错的,不知道为啥

一,个人觉得右值a是一个二维数组,不是一个int,所以不行,
二,若a是一个int,必须需要&a,才能赋值给p
三,a此时是一个特殊的变量,我确实也没有搞清楚这个a属于什么类型的变量,说他是首地址吧,也对,说他是数组指针吧,也是的。
查了一下,这种二维数组,的申明,还有个特点,必须先指定它的列,我不知道为什么要这样。

jackz007 发表于 2022-10-12 00:24:45

本帖最后由 jackz007 于 2022-10-12 00:25 编辑

我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥
      
      因为 a 是二维数组,不可以直接为一维指针赋值,这样写试试
      int * p = a ;

homeskating 发表于 2022-10-12 08:36:48

二维数组是一维数组的扩展,直接进行int指针赋值就变成了多赋一,所以报错。
页: [1]
查看完整版本: 这个哪里错了