str是指一个指针常量,指向的是一哥char数组开始地址,它指向的地址不能改变,但指向的地址内容是可以改变的,存放在函数栈区。str1是一个指向常理的指针,指向的对象可以变化,但执行的对象的内容不可用改变,这个内容是一个常量,存放在数据段区。所以,可以往str里面重复写东西,但str1指向的对象,内容不可用再做改变,所以无法重复写。而str3只是声明的一个地址而已,这里应该算是c语言的一个bug。只做声明不做检查,所以,通过操作str,str3指针直接往里面写东西,一不小心就内存栈溢出了,会覆盖掉其他内存,可能会发生这个视频演示的这种事情,只是覆盖了其他变量的内容,但也可能程序发生溢出或者崩溃
2015-09-19
这节课完全不应该这么讲~虽然我知道你什么意思,无非就是说指针的地址也可以移动~不会出现数组越界的情况,也就是要十分小心的内存泄露,指针乱指。。。但整个表达方法不好
2015-09-19
已采纳回答 / onemoo
函数本身代码的地址并不在栈中,它们在代码段中。函数调用时才会将参数和各种用到的变量以栈帧结构存在栈中,这会使栈依照调用顺序来增长。所以参数的压栈地址可以说明它们的调用顺序。
2015-09-16