码迷,mamicode.com
首页 > 其他好文 > 详细

一道C的题

时间:2015-09-13 18:38:14      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

这道题是这样的

 1 #include <stdio.h>
 2 void print()
 3 {
 4     //只可以在这里写代码,
 5     //输出arr数组中的所有内容
 6 }
 7 int main()
 8 {
 9     int a = 1;
10     int b = 2;
11     char c = c;
12     int arr[] = {11,12,13,14,15,16,17};
13     print();
14     return 0;
15 }

这个是不可以传递参数的,这怎么办呢?

这时就要从操作系统的层面来看这个程序了。

一个C语言的程序主要分为这几个部分:堆、栈、还有bss段。

而这些函数以及局部变量都是存在栈上的,而且C中的栈是从高位到地位,堆是从低位到高位。

这时就可以在print中申请一个变量,这个变量会入栈,而且在栈的低位。

这样就好办了,从这个栈向上加就行了。

(中间的过程还会有一些其他的东西入栈,等着抽个时间解释)

 1 #include <stdio.h>
 2 void print()
 3 {
 4     int i = 1;    
 5     int* p = &i + 5;
 6     int k;
 7     for(k = 0;k < 7;k++)
 8     {
 9         printf("%u\n",p[k]);
10     }
11 }
12 int main()
13 {
14     int a = 1;
15     int b = 2;
16     char c = c;
17     int arr[] = {11,12,13,14,15,16,17};
18     print();
19     return 0;
20 }

结果就出来了

一道C的题

标签:

原文地址:http://www.cnblogs.com/yezuozuoloveqi/p/4805245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!