指针结构体
#include<stdio.h>struct ks
{
int a;
int *b;
}s,*p;
int main()
{
int n=1,i;
printf("\n");
for(i=0;i<4;i++)
{
s.a=n;
s.b=&s.a;
n=n+2;
}
p=&s;
p++;
printf("%d,%d\n",(++p)->a,(p++)->a);
return 0;
}
为啥输出7,3? 本帖最后由 jackz007 于 2022-10-16 17:20 编辑
gcc 编译、运行:
D:\\C>g++ -o x x.c
D:\\C>x
7,3
使用 VC 6.0 编译、运行:
D:\\C>cl x.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
x.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:x.exe
x.obj
D:\\C>x
5,3
D:\\C>
就是说:
【gcc】:
7,3
【VC6.0】:
5,3
可见,结果因编译器而异,这种问题不适合讨论。
如果不想自找麻烦,劝楼主不要写这样的代码。
jackz007 发表于 2022-10-16 17:17
gcc 编译、运行:
使用 VC 6.0 编译、运行:
可是他要考试呀,没办法
考试就是喜欢考这些
我建议是,考试只能是死记硬背,管他什么原理,背过就能考过
这种代码确实不好。
实际确实就是ks定义成了数组,又定义成p,是可以指向这个同类的数组。
你指向的是这个数组中的首元素地址,而不是s,这个我觉得有点不明白。此时,你的p自加后,是元素往后呢?还是s整个结构往后(实际上s无法往后了)
但看到你能成功运行,我又只能认为p可以指向元素,元素的本质呢,还是ks,看这绕的,简直不利于入门嘛。
但确实有些认为设置认识障碍的意味。
页:
[1]