A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 远人 中级黑马   /  2014-4-1 09:31  /  982 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 远人 于 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函数中,输入的求解参数,是不是输入就是地址?
呵呵,可能问的有点含糊!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-1 10:11:42
沙发
name 代表函数返回的字符串"rose"的首地址,你要输出该字符串,所以在printf函数中必须用name。
回复 使用道具 举报
test函数返回rose字符串。然后将rose赋值给name。name就指向字符串rose,存储的是rose的首地址。怎么会是函数test的地址?*name是字符串的第一个字符,即n。因为它是char型,与%s不匹配,故是错误的。
回复 使用道具 举报
pfintf就是按地址顺序输出的,name相当于一个字符串数组,
前边加了个*就是取出地址了 %s就不对了
回复 使用道具 举报
  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* 类型,即地址
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马