隐蔽之鲷 2023-09-18 16:57 采纳率: 50%
浏览 2
已结题

在方法返回值和二维数组中使用类型转化的问题

//定义一个结构体
struct SubStatus {
    int selected;
    int noselected;
};

struct SubStatus fun()
{
        //报错,返回值不能使用类型名
        return  struct SubStatus { 0, 0 };
        //改法1
        struct SubStatus sub = { 0 , 0 };
        return sub;
        //改法2
        return  (struct SubtStatus){ 0, 0 };
}

//定义一个二维数组
int arr[3][3] = { 1,2,3 ,4,5,6,7,8,9 };
printf("%d ", (arr+1)[1] == arr[2]);  //为真

问方法和数组中()的是什么原理?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-18 18:26
    关注

    【以下回答由 GPT 生成】

    问题解答

    1. 在函数中返回结构体时为什么不能直接使用类型名作为返回值?

    在C语言中,结构体是一种用户自定义的数据类型。在一个函数中,如果要返回一个结构体,需要使用结构体变量作为返回值,而不能直接使用类型名作为返回值。

    例如,在给定的代码中,函数fun()尝试直接使用struct SubStatus作为返回值类型,这是不正确的。正确的做法是在函数内部定义一个结构体变量,如下所示:

    struct SubStatus fun()
    {
        struct SubStatus sub = { 0 , 0 };
        return sub;
    }
    

    这里,我们首先在函数内部定义了一个名为sub的结构体变量,并将其初始化为{0, 0}。然后,我们使用这个变量来返回结果。

    2. 数组表达式(arr+1)[1]arr[2]相等的原理是什么?

    在C语言中,数组名表示数组首元素的地址。当我们在代码中使用arr时,它代表了一个指向arr[0][0]的指针。因此,表达式(arr+1)[1]可以视为对arr[1][1]的引用,而arr[2]代表了arr[2][0]的地址。

    由于数组在内存中是连续存储的,arr[1][1]arr[2][0]在内存中的位置是相邻的。因此,这两个表达式在逻辑上是相等的,比较它们的结果将返回true(非零值)。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月22日
  • 创建了问题 9月18日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题