黑马程序员技术交流社区

标题: 返回指针的函数问题? [打印本页]

作者: 远人    时间: 2014-4-1 09:31
标题: 返回指针的函数问题?
本帖最后由 远人 于 2014-4-4 13:16 编辑

下面是返回指针的函数,有个问题不太明白,想求证,先看代码:

  1. #include <stdio.h>

  2. char *test();

  3. int main(int argc, const char * argv[])
  4. {

  5.     char *name = test();
  6.     printf("name = %s\n",name);
  7. //    printf("name = %s\n",*name);
  8.     return 0;
  9. }

  10. char *test()
  11. {
  12.     return "rose";
  13. }
复制代码


如我注释的那行,Xcode报错,程序崩溃,我想问:从这个能否看出,这里的的name代表的是函数test()的地址,然后我修改成*name就是错误的;根据经验,在printf函数中,输入的求解参数,是不是输入就是地址?
呵呵,可能问的有点含糊!
作者: 沙洲冷    时间: 2014-4-1 10:11
name 代表函数返回的字符串"rose"的首地址,你要输出该字符串,所以在printf函数中必须用name。
作者: conpgy    时间: 2014-4-1 11:16
test函数返回rose字符串。然后将rose赋值给name。name就指向字符串rose,存储的是rose的首地址。怎么会是函数test的地址?*name是字符串的第一个字符,即n。因为它是char型,与%s不匹配,故是错误的。
作者: agelessman    时间: 2014-4-1 12:13
pfintf就是按地址顺序输出的,name相当于一个字符串数组,
前边加了个*就是取出地址了 %s就不对了
作者: 程浩    时间: 2014-4-1 18:18
  1.     char *name = test();//name此时虽然是指针类型char * ,但由于test()返回的是地址,*地址就相当于取值了,所以name此时已经是字符串rose,可以直接输出。
  2.     printf("name = %s\n",name);
  3. //    printf("name = %s\n",*name);
  4.     return 0;
  5. }

  6. char *test(){}//test()返回的是char* 类型,即地址
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2