标签:
这道题是这样的
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 }
结果就出来了
标签:
原文地址:http://www.cnblogs.com/yezuozuoloveqi/p/4805245.html