鱼C论坛

 找回密码
 立即注册
查看: 2149|回复: 3

[已解决]指针结构体

[复制链接]
发表于 2022-10-16 16:57:07 | 显示全部楼层 |阅读模式

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

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

x
  1. #include<stdio.h>
  2. struct ks
  3. {
  4.         int a;
  5.         int *b;
  6. }s[4],*p;
  7. int main()
  8. {
  9.         int n=1,i;
  10.         printf("\n");
  11.         for(i=0;i<4;i++)
  12.         {
  13.                 s[i].a=n;
  14.                 s[i].b=&s[i].a;
  15.                 n=n+2;
  16.         }
  17.         p=&s[0];
  18.         p++;
  19.         printf("%d,%d\n",(++p)->a,(p++)->a);
  20.         return 0;
  21. }
复制代码

为啥输出7,3?
最佳答案
2022-10-16 17:17:28
本帖最后由 jackz007 于 2022-10-16 17:20 编辑

        gcc 编译、运行:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x

  3. 7,3
复制代码

        使用 VC 6.0 编译、运行:
  1. D:\[00.Exerciese.2022]\C>cl x.c
  2. Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
  3. Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

  4. x.c
  5. Microsoft (R) Incremental Linker Version 6.00.8447
  6. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

  7. /out:x.exe
  8. x.obj

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

  10. 5,3

  11. D:\[00.Exerciese.2022]\C>
复制代码

就是说:
【gcc】:
  1. 7,3
复制代码

【VC6.0】:
  1. 5,3
复制代码

      可见,结果因编译器而异,这种问题不适合讨论。
      如果不想自找麻烦,劝楼主不要写这样的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-16 17:17:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-16 17:20 编辑

        gcc 编译、运行:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x

  3. 7,3
复制代码

        使用 VC 6.0 编译、运行:
  1. D:\[00.Exerciese.2022]\C>cl x.c
  2. Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
  3. Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

  4. x.c
  5. Microsoft (R) Incremental Linker Version 6.00.8447
  6. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

  7. /out:x.exe
  8. x.obj

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

  10. 5,3

  11. D:\[00.Exerciese.2022]\C>
复制代码

就是说:
【gcc】:
  1. 7,3
复制代码

【VC6.0】:
  1. 5,3
复制代码

      可见,结果因编译器而异,这种问题不适合讨论。
      如果不想自找麻烦,劝楼主不要写这样的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-16 20:42:32 | 显示全部楼层
jackz007 发表于 2022-10-16 17:17
gcc 编译、运行:

        使用 VC 6.0 编译、运行:

可是他要考试呀,没办法
考试就是喜欢考这些
我建议是,考试只能是死记硬背,管他什么原理,背过就能考过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-21 23:16:53 From FishC Mobile | 显示全部楼层
这种代码确实不好。
实际确实就是ks定义成了数组,又定义成p,是可以指向这个同类的数组。
你指向的是这个数组中的首元素地址,而不是s,这个我觉得有点不明白。此时,你的p自加后,是元素往后呢?还是s整个结构往后(实际上s无法往后了)
但看到你能成功运行,我又只能认为p可以指向元素,元素的本质呢,还是ks,看这绕的,简直不利于入门嘛。
但确实有些认为设置认识障碍的意味。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 07:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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