这个哪里错了
# 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: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> 为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?
本帖最后由 jackz007 于 2022-10-11 22:53 编辑
我是扬帆起航 发表于 2022-10-11 21:30
为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?
提问最好以回帖(用鼠标点击楼层下方的 "回复" 按钮)的方式贴出信息,否则,我无法收到论坛的提醒,得主动翻你的帖子才能看到新的提问。
2 楼的代码第 5 行不是赋首地址了吗?
不妨就本例的数据,进行举例说明,你到底想要什么样的效果? jackz007 发表于 2022-10-11 22:42
提问最好以回帖(用鼠标点击楼层下方的 "回复" 按钮)的方式贴出信息,否则,我无法收到论坛的 ...
这个 int *p=a是错的,不知道为啥 我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥
这个 int *p=a是错的,不知道为啥
一,个人觉得右值a是一个二维数组,不是一个int,所以不行,
二,若a是一个int,必须需要&a,才能赋值给p
三,a此时是一个特殊的变量,我确实也没有搞清楚这个a属于什么类型的变量,说他是首地址吧,也对,说他是数组指针吧,也是的。
查了一下,这种二维数组,的申明,还有个特点,必须先指定它的列,我不知道为什么要这样。 本帖最后由 jackz007 于 2022-10-12 00:25 编辑
我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥
因为 a 是二维数组,不可以直接为一维指针赋值,这样写试试
int * p = a ; 二维数组是一维数组的扩展,直接进行int指针赋值就变成了多赋一,所以报错。
页:
[1]