您好、欢迎来到现金彩票网!
当前位置:千旺彩票 > 复制数组 >

c语言数组作形参什么时候是复制数组什么时候是按引用?

发布时间:2019-05-10 15:08 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  当数组做函数参数时候会退化为指针,也就是说你即使是声明参数为char s[],也等价为char *s,你说的不改变效果的意思是s是函数参数,对参数的操作无效么?如果是这样的话,你传谁都打不到效果,因为都会是指针,strcpy是直接操作指针的内存的,换种写法可以

  这需要你理解c的内存四区,主要有代码区(这个不重要),堆区,栈区,静态区,这里堆区和栈区好理解吧,真是不理解了自己查一下,针对你这个问题关键是常量区,=右端的字符串是编译器自动放到常量区的,你只需要知道指针就行,但是strcpy是将“hello”这个字符串给拷贝到s指针所指向的内存里面了,他是直接修改的内存,=只是修改了指针而已,不知道你有没有明白

  这么一说当然是理解了,但是我以前好像还听说什么字符串用指针方式声明是不可改变的,要用数组方式声明才能重新赋值。比如在主函数中先定义char *s = abc,然后再传进函数,运行会报错。请解释下?

  你理解的应该是char *s = “hello”和char s[20] = hello,他们两个内存配方式是不一样的前者是现在静态区分配了“hello”然后在栈上分配了一个char*的内存空间s将“hello”的地址付给了s,如果你试图去通过s[0] = a来修改hello肯定是会崩溃的,因为他是再常量区放着,不允许修改的。但后者就不一样了,他是直接在栈上分配了20个字节的内存空间,栈上的数据可以随便修改,所以完全可以调用s[0] = a,可以重新赋值。你这个问题是指针做参数问题,这是因为你两个问题都不清楚,又混到一块,你会更迷糊的。你先把指针做参数问搞明白了,在吧内存四区搞明白了,这些你就全明白了。

http://csyuntao.net/fuzhishuzu/245.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有