指针参数问题
还有0人有此问题
发表在C语言图书答疑 2021-04-29
是否精华
版块置顶:

老师:这个是您书上的代码,因我我按照我自己的理解,写了一下代码,我知道值传递的时候自定义函数是不能传回到主函数中的。但是我就在模仿您书上的代码写的时候,出现了错误,然后赋值了您书上的源代码,结果也是同样的错误。当我吧数组cSelect[]中放入了元素个数后,错误就没有了。我现在在想个问题,当我给数组赋初值的时候,数组会根据元素自动调整元素长度,那么为何这个函数会出现错误,显示数组周围的栈已破坏?我也知道函数在被调用完之后会被系统自动销毁,可是数组长度写上以后就不会出现这样的错误,这里的原理是什么?我个人理解的是:因为定义数组的时候系统给开辟了一个连续的内存空间,当内存被写入的时候这个连续的内存空间在堆区是不会销毁掉的,知道主函数结束才会被销毁。但是当数组没有长度,也没有初值的时候,所有的数据都存在了栈区里面的,scanf写入的时候也是存储在栈区的。因为内存没有为数组开辟连续内存空间?那么问题又来了,如果以上表述是正确的,那么主函数的数据是不是在没有开辟内存空间的时候,所有的数据都是存在栈区的。如果是这样,那和我理解的数据区存储的都是在栈区的相违背了。老师我以上的三个问题没有弄清楚,麻烦您讲一下,越详细越好,麻烦耽误您几分钟,不胜感激

分享到:
精彩评论 5
18652179116
学分:750 LV7
2021-04-29
沙发

image.png这个是书上的源代码

18652179116
学分:750 LV7
2021-04-29
板凳

老师:这个是您书上的代码,因我我按照我自己的理解,写了一下代码,我知道值传递的时候自定义函数是不能传回到主函数中的。但是我就在模仿您书上的代码写的时候,出现了错误,然后复制了您书上的源代码,结果也是同样的错误。当我吧数组cSelect[]中放入了元素个数后,错误就没有了。我现在在想个问题,当我给数组赋初值的时候,数组会根据元素自动调整数组长度,那么为何这个函数会出现错误,显示数组周围的栈已破坏?我也知道自定义函数在被调用完之后会被系统自动销毁,可是数组长度写上以后就不会出现这样的错误,这里的原理是什么?我个人理解的是:因为定义数组的时候系统给开辟了一个连续的内存空间,当内存被写入的时候这个连续的内存空间在堆区是不会销毁掉的,直到主函数结束或者关机才会被系统回收。但是当主函数中的数组没有长度,也没有初值的时候,所有的数据都存在了栈区里面的,scanf写入的时候也是存储在栈区的,因为内存没有为数组开辟连续内存空间?以上这些是我的个人理解。那么问题又来了,如果以上表述是正确的,那么主函数的数据是不是在没有开辟内存空间的时候,所有的数据都是存在栈区的(也不对啊,没有开辟内存空间,主函数也不能进行输入输出啊...哎,有点转不过来)?如果是这样,那和我理解的主函数中的数据区存储都是在堆区的相违背了。老师我以上的三个问题没有弄清楚,麻烦您讲一下,越详细越好,麻烦耽误您几分钟,不胜感激
老师看这个,上面那个有写错的地方,嘿,看这里

李木子
学分:2954 LV11
2021-04-29
地板

你好:

   image.png这是我书上的源码 里面有数组长度呀,因为定义数组时,初始化是“”里面是没用内容的,如果不写长度,编译器没发给分配内存,但是要是这样修改:

image.png这里就在定义时,直接赋值了,在数组那里并没有写长度,但是可以根据 赋值内容自动分配空间 

18652179116
学分:750 LV7
2021-04-29
4L

李木子 发表于2021-04-29 13:09

你好:

   image.png这是我书上的源码 里面有数组长度呀,因为定义数组时,初始化是“”里面是没用内容的,如果不写长度,编译器没发给分配内存,但是要是这样修改:

image.png这里就在定义时,直接赋值了,在数组那里并没有写长度,但是可以根据 赋值内容自动分配空间 

以上内容清楚明白!
老师您看书上199页

李木子
学分:2954 LV11
2021-05-06
5L

18652179116 发表于2021-04-29 14:14

以上内容清楚明白!
老师您看书上199页

你好:

   书上用得是vc6,再vc6中编译运行没有错误,而再vs中运行有错误,嗯...这里算纠错吧,再加印时,修改一下,谢谢反馈

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照