请教大神们一个问题 关于函数返回数组指针

matchaj 2016-11-10 07:50:57
代码在此:
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

int (*f( int (&i)[10]))[10]
{
return &i;
}

int (&g( int (&i)[10]))[10]
{
return i;
}

int main()
{
int a=4;
int *p;
int i[10] = {2 };
cout << "i address is " <<i << endl;
p = *f(i);
cout <<"*p is "<< *p << endl;
cout << "*f(i) is " << *f(i) << endl;
cout << "*g(i) is " << *g(i) << endl;
return 0;
}

运行结果是这样的:


我想问下为什么 *f(i)的值是地址值?函数f返回的不就是个地址吗,解引用了为什么还是地址值
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
matchaj 2016-11-10
  • 打赏
  • 举报
回复
引用 4 楼 ipqtjmqj 的回复:
引用 2 楼 matchaj 的回复:
[quote=引用 1 楼 ipqtjmqj 的回复:] 解引用后是数组,打印一个数组打印的是地址, 不信你直接cout << i;
函数f和函数g的返回值都是数组i的首地址,但是他俩的解引用却是不一样的,搞不懂这里,而且对函数f解引用两次才是数值2
f返回的是指向数组的指针,第1次解引用后变成数组,第2次才是值 g直接返回了数组[/quote]了解了 谢谢!
ipqtjmqj 2016-11-10
  • 打赏
  • 举报
回复
引用 2 楼 matchaj 的回复:
引用 1 楼 ipqtjmqj 的回复:
解引用后是数组,打印一个数组打印的是地址, 不信你直接cout << i;
函数f和函数g的返回值都是数组i的首地址,但是他俩的解引用却是不一样的,搞不懂这里,而且对函数f解引用两次才是数值2
f返回的是指向数组的指针,第1次解引用后变成数组,第2次才是值 g直接返回了数组
fefe82 2016-11-10
  • 打赏
  • 举报
回复
引用 2 楼 matchaj 的回复:
引用 1 楼 ipqtjmqj 的回复:
解引用后是数组,打印一个数组打印的是地址, 不信你直接cout << i;
函数f和函数g的返回值都是数组i的首地址,但是他俩的解引用却是不一样的,搞不懂这里,而且对函数f解引用两次才是数值2
返回一个是指针,一个是引用,可不一样
matchaj 2016-11-10
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
解引用后是数组,打印一个数组打印的是地址, 不信你直接cout << i;
函数f和函数g的返回值都是数组i的首地址,但是他俩的解引用却是不一样的,搞不懂这里,而且对函数f解引用两次才是数值2
ipqtjmqj 2016-11-10
  • 打赏
  • 举报
回复
解引用后是数组,打印一个数组打印的是地址, 不信你直接cout << i;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧