已采纳回答 / onemoo
函数本身代码的地址并不在栈中,它们在代码段中。函数调用时才会将参数和各种用到的变量以栈帧结构存在栈中,这会使栈依照调用顺序来增长。所以参数的压栈地址可以说明它们的调用顺序。
2015-09-16
已采纳回答 / onemoo
str2="world" 这样并不是把world这几个字符复制到str2所指的区域,字符串字面量做右值时会转换为指向首字符的指针,所以这语句是把str2指向“world”这个字符串所在的位置。需要复制字符串应使用LS说的strcpy函数。一般程序会把字符串字面量放到只读数据段中(无法被修改),所以后续通过str2来修改这些内容会引起"段错误"。你代码的另一个问题是,在你给str2第二次赋值后就丢掉了前一次分配的指针,导致无法回收那段内存,引起内存泄漏。
2015-09-02
已采纳回答 / onemoo
str 比 str2 高 0x40-0x38 = 8字节,str占用6个字节,可以容纳开。str3 比 str 高 0x50-0x40 = 16字节,str3占用10个字节,也可以容乃开。一般变量的地址起始要求是2或4的倍数,所以为了对齐,变量之间会有额外的空当。
2015-08-09
已采纳回答 / onemoo
这是函数指针声明。这是将pquadrate声明为函数指针,它指向的是有一个int型参数,返回值为int的函数。这语句同时将pquadrate初始化为quadrate的地址(显然quadrate应该是个函数名)。一步一步讲这个声明:这语句声明的是pquadrate变量,前面有个*,而且是用小括号和变量名括起来的(*pquadrate),表明这个变量名优先和*结合。声明变量时前面有*就代表这个变量是指针,所以pquadrate是个指针。那它指向什么呢?接着看,后面有小括号,前面有类型,表明是个函数。参数就是i...
2015-07-28
已采纳回答 / noming
栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:1.函数的返回地址和参数2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。首先你要知道,由于外部环境变化,某些函数每一次执行都会返回不同的结果。最典型的就是取随机数函数了而栈里面存着的就是这些东西。所以,每一个线程都会得到不同的结果,每一个线程也都需要一个存着这个结果的栈!
2015-06-06