qpwoeiruyt 发表于 2019-3-18 04:05:30

地址还有指针表格之间关系的问题

请大佬详细解答一下弄不清什么时候四个字节什么时候一个字节啊



#include <stdio.h>
      int main()
      {
      int a;
      char c;
      int b;
      printf("adresseb =%p\n",&b);
      return(0);
}

编译后得adresseb =0x7ffd901cdc8c 求c 的地址是多少?   


------------------------------第二问----------------------------------------

#include <stdio.h>
int main() {
      int b;
      int a;
      b[/* 自行补充 */]=/* 自行补充 */;
      printf("a=%d\n",a);
      return(0);
}

编译后得 a=50400问 中间那行代码要怎么补充才能成功编译出结果


--------------------------第三问-----------------------------------------------

#include <stdio.h>
int main() {
      int b;
      int a;
      char *c;
      c=(char *)&(b);

      c[/* 自行补充 */]=/* 自行补充 */;
      c[/* 自行补充 */]=/* 自行补充 */;
      c[/* 自行补充 */]=/* 自行补充 */;
      c[/* 自行补充 */]=/* 自行补充 */;
      printf("%d",a);
return(0); }

编译后得 a=257问中间那4行代码要怎么补充才能成功编译出结果

82457097 发表于 2019-3-18 11:46:56

本帖最后由 82457097 于 2019-3-18 12:04 编辑

1.int 型是四个字节 char是一个字节
2.b[-4]=50400;
3.c与a差了四个int型数据 也就是偏移地址位4*6=24 c[-24]的地址应该与a的地址一样 但是我改了c[-24]的值却改变不了a的值

我也想知道答案{:5_92:}

qpwoeiruyt 发表于 2019-3-18 14:39:01

82457097 发表于 2019-3-18 04:46
1.int 型是四个字节 char是一个字节
2.b[-4]=50400;
3.c与a差了四个int型数据 也就是偏移地址位4*6=24 ...

我看教学视频 没有 b【-4】 这种操作啊   {:5_94:}

82457097 发表于 2019-3-18 16:57:19

我感觉这几道题就是在考内存分布和不同类型在内存中占的字节数 数组越界不总是错误的 有时候是可利用的

Croper 发表于 2019-3-18 17:15:44

这是哪儿的题啊。。这种跨变量的位移实际编程的话并不总是和理论一致,因为内存管理的原因导致非常容易出错;除非你能确定汇编代码,不然这题目毫无意义

qpwoeiruyt 发表于 2019-3-18 19:50:42

是老师布置的题目就是这种内存分布的 还有字节数的 题

qpwoeiruyt 发表于 2019-3-19 00:41:52

顶一下§±±±±±

qpwoeiruyt 发表于 2019-3-19 14:06:03

求大佬解疑

qpwoeiruyt 发表于 2019-3-19 20:06:25

{:5_90:}

qpwoeiruyt 发表于 2019-3-20 04:24:54

{:5_90:}

RIXO 发表于 2019-3-26 11:23:21

我也是初学者,但我用的是vs2017,不知道和你的答案是否一致,我在调试中看过内存布局,连续申请的变量其实在内存上面是连续的,而且会有对齐,对齐的原理不理解。
下面是我的一个内存和代码截图,可以看到虽然是连续的但是VS提前就预留了一部分空间,所以说上面的题是基于各个编译器的,实际情况不一定。而且预留多少,是编译器的部分。你需要根据自己的编译器来解决,编写上面的代码,不然就是没有意义的问题。
页: [1]
查看完整版本: 地址还有指针表格之间关系的问题