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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白羊爱芒果 中级黑马   /  2014-5-16 21:06  /  1535 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
char *test();
int main ()
{
     char *name = test ();
     printf("name = %s \n",name);
     return 0;
}
char *test ()
{
     return "rose";
}
谁能解释一下

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

6 个回复

倒序浏览
char *test()表示返回的是一个指向字符串类型的指针,*的运算优先级低于(),在调用test函数时,先算的test函数的值,然后返回该值的地址给调用他的函数,name最后得到的就是“rose”的地址,你知道name已经定义为指针变量了

评分

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

查看全部评分

回复 使用道具 举报 3 0
这个不是返回函数的指针,其实 char * 可以理解为是字符串的表示形式
看我的代码可能清晰一点

  1. #include <stdio.h>

  2. // 给 char * 取一个别名 String
  3. typedef char * String;

  4. // 对test函数进行声明
  5. String test();


  6. int main ()
  7. {
  8.     // 定义一个字符指针 接收test函数返回值
  9.     char *name = test ();
  10.     printf("name = %s \n",name);
  11.     return 0;
  12. }


  13. // 其实 char * 是返回值类型
  14. String test ()
  15. {
  16.     return "rose";
  17. }
复制代码

希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报 1 0
char *test()中test表示的是函数名,调用它以后能得到一个char型(指向字符型数据)的指针,即字符型数据的地址,故输出结果应是rose的地址,你看看是不是。

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报 1 0
forever决 发表于 2014-5-16 21:40
char *test()中test表示的是函数名,调用它以后能得到一个char型(指向字符型数据)的指针,即字符型数据的地 ...

应该是char *型的指针
回复 使用道具 举报
char* 表示返回的是一个字符串常量,就是这么简单,也就是返回一个指针而已,指针指向的内容是内存中的一块内存,而这块内存就是存放的你那个“ROSE“
回复 使用道具 举报
傘が咲く 发表于 2014-5-16 21:38
这个不是返回函数的指针,其实 char * 可以理解为是字符串的表示形式
看我的代码可能清晰一点

写的真好,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马