鱼C论坛

 找回密码
 立即注册
查看: 2786|回复: 7

[已解决]这个哪里错了

[复制链接]
发表于 2022-10-11 21:01:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# include <stdio.h>
int main ()
{
        int a[3][3]={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;
}
最佳答案
2022-10-11 21:18:56
本帖最后由 jackz007 于 2022-10-11 21:27 编辑
#include <stdio.h>
int main ()
{
        int a[3][3]={1,2,3,4,5,6,7,8,9}   ;
        int (* p)[3] = a                  ;
        printf("%d\n", * (* p))           ; // a[0][0]
        printf("%d\n", * (* (p + 1) + 1)) ; // a[1][1]
        printf("%d\n", * (* (p + 2) + 2)) ; // a[2][2]
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1
5
9

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-11 21:18:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-11 21:27 编辑
#include <stdio.h>
int main ()
{
        int a[3][3]={1,2,3,4,5,6,7,8,9}   ;
        int (* p)[3] = a                  ;
        printf("%d\n", * (* p))           ; // a[0][0]
        printf("%d\n", * (* (p + 1) + 1)) ; // a[1][1]
        printf("%d\n", * (* (p + 2) + 2)) ; // a[2][2]
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1
5
9

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-11 21:30:47 | 显示全部楼层
为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-11 22:42:14 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-11 22:53 编辑
我是扬帆起航 发表于 2022-10-11 21:30
为什么指针变量不可以赋值为a,j也就是二维数组的首地址呢?


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

使用道具 举报

 楼主| 发表于 2022-10-12 00:02:38 From FishC Mobile | 显示全部楼层
jackz007 发表于 2022-10-11 22:42
提问最好以回帖(用鼠标点击楼层下方的 "回复" 按钮)的方式贴出信息,否则,我无法收到论坛的 ...

这个 int *p=a是错的,不知道为啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-12 00:24:43 From FishC Mobile | 显示全部楼层
我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥

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

一,个人觉得右值a是一个二维数组,不是一个int,所以不行,
二,若a是一个int,必须需要&a,才能赋值给p
三,a此时是一个特殊的变量,我确实也没有搞清楚这个a属于什么类型的变量,说他是首地址吧,也对,说他是数组指针吧,也是的。
查了一下,这种二维数组,的申明,还有个特点,必须先指定它的列,我不知道为什么要这样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-12 00:24:45 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-12 00:25 编辑
我是扬帆起航 发表于 2022-10-12 00:02
这个 int *p=a是错的,不知道为啥

        
        因为 a 是二维数组,不可以直接为一维指针赋值,这样写试试
        int * p = a[0] ;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-12 08:36:48 | 显示全部楼层
二维数组是一维数组的扩展,直接进行int指针赋值就变成了多赋一,所以报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表