代码改变世界

随笔档案-2013年09月

c实参传递给形参

2013-09-28 19:21 by 放作夥, 797 阅读, 收藏,
摘要: viod GetMemory(char*p,int num){ p=(char*)malloc(sizeof(char)*num);}voidTest(void){ char*str=NULL; GetMemory(str,100);//str仍为NULL strcpy(str,"hello");//运行出错}无论函数参数是什么类型,都是按照传递一份拷贝进去的,就算是指针也是一样。本例中,GetMemory(str,100)这句话,实际上传递的也是str指针的值null进去。所以其实GetMemory(char *p, int num)中的p指针实际上是一个临时变量(一个在 阅读全文

(转)栈的生长方向

2013-09-27 20:08 by 放作夥, 1381 阅读, 收藏,
摘要: 51的栈是向高地址增长,INTEL的8031、8032、8048、8051系列使用向高地址增长的堆栈;但同样是INTEL,在x86系列中全部使用向低地址增长的堆栈。其他公司的CPU中除ARM的结构提供向高地址增长的堆栈选项外,多数都是使用向低地址增长的堆栈。在没有MMU的时代,为了最大的利用内存空间,堆和栈被设计为从两端相向生长。那么哪一个向上,哪一个向下呢?人们对数据访问是习惯于向上的,比如你在堆中new一个数组,是习惯于把低元素放到低地址,把高位放到高地址,所以堆向上生长比较符合习惯。而栈则对方向不敏感,一般对栈的操作只有PUSH和pop,无所谓向上向下,所以就把堆放在了低端,把栈放在了高 阅读全文