运行下面这段代码,会出现的情况是 ( )

  1. hello world
  2. 显示为乱码
  3. 程序崩溃
  4. hello
2 收藏


直接登录
最新评论
  • 江江江江江俊傑 c++程序狗 2015/10/28

    3

  • 飞天熊猫 学生 2015/10/28

    答案是3,但是为什么?那条语句放到Test里就没事,单拿出去就崩溃了,不懂-_-#

  • 飞天熊猫 学生 2015/10/28

    想了半天,忽然想到当年学数据结构时也是遇到这种问题了。我来说一下自己的理解,如果不对,还请指正。null相当于空值,也就是说str没有地址的,目前只有名称,但是传递的过程是需要传递地址的,所以压根就没传进去,也不会改变或者是赋予一个地址。不知道对不对,也不知道大家理解没。。。

    • 穷小子 反正不是IT 2015/10/28

      指针传进去了,但是传进去的那个指针所指向的位置没有发生任何改变,就把形参定义的P指针改变了指向,让它指到另一个位置了。。。如果在C++里,可以用引用来解决吧。

    • 王先生 学生 2015/11/08

      程序崩溃。因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。

  • 飞天熊猫 学生 2015/10/28

    形参是传递值的,但是null不是一个值,这样说比较标准一些。。。

  • 很简单,str是NULL,而NULL是没有分配空间的,没有办法去给它赋值。
    这个程序的本来意思就是先把str清空,可惜传递的是形参

  • GetMemory(char* p)参数是一级指针,p是形参,可以改变指针指向的内容但不能改变指针本身。

  • 穷小子 反正不是IT 2015/10/28

    传入的时候让P指向了str指向的内存空间,然后给p指针new了一个新对象的时候p开始指向别的地方了,而str指向的地方完全没改变,所以copy的时候str指向的是null,程序会崩溃的。指针的灵活性就表现在这种地方了。。。但是有点儿太灵活了。。。

  • 王先生 学生 2015/10/30

    答案为C GetMemory(char *p);这里*p是形参,是局部变量
    不能讲malloc申请的地址指针返回,造成内存泄露
    更严重的是执行GetMemory(str);后str依然为NULL
    执行strcpy(str, ‘hello world’);就会出错