鱼C论坛

 找回密码
 立即注册
查看: 1299|回复: 5

[已解决]返回值和类型的问题

[复制链接]
发表于 2022-2-11 17:28:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int* myfind2(const vector<int>&vec, int value) {
        for (int ix = 0; ix <vec.size(); ++ix) {
                if (vec[ix] == value)
                        return &vec[ix];
        return 0;
        }
        

}
上述代码中,一直报返回类型和值不匹配的问题,请问哪里有问题,纯菜鸟,求助
最佳答案
2022-2-11 17:42:22
#include <vector>

using std::vector;

const int *myfind2(const vector<int> &vec, int value) {
    for(int ix = 0; ix < vec.size(); ++ix) {
        if(vec[ix] == value)
            return &vec[ix];
        return 0;
    }

    // return ???;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 17:39:57 | 显示全部楼层
因为你的代码里面有一个return 0,而你的返回类型应该是一个整型的指针,不是整型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 17:42:22 | 显示全部楼层    本楼为最佳答案   
#include <vector>

using std::vector;

const int *myfind2(const vector<int> &vec, int value) {
    for(int ix = 0; ix < vec.size(); ++ix) {
        if(vec[ix] == value)
            return &vec[ix];
        return 0;
    }

    // return ???;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-11 17:52:43 | 显示全部楼层
试试这个:
#include <iostream>
#include <vector>

using std::cout, std::endl, std::vector;

int* myfind2(const vector<int>& vec, int value) {
    for (int x: vec) {
        if (x == value) {
            return &x;
        }
    }
    return NULL;
}

int main() {
    vector<int>arr = { 13, 2, 3, 4, 5 };
    int x = 3;
    int* p = myfind2(arr, x);
    cout << *p;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 19:07:26 | 显示全部楼层

返回局部变量的地址?
$ cat main.cpp
#include <iostream>
#include <vector>

using std::cout, std::endl, std::vector;

int* myfind2(const vector<int>& vec, int value) {
    for (int x: vec) {
        if (x == value) {
            return &x;
        }
    }
    return NULL;
}

int main() {
    vector<int>arr = { 13, 2, 3, 4, 5 };
    int x = 3;
    int* p = myfind2(arr, x);
    cout << *p;
    return 0;
}
$ g++-debug -o main main.cpp
main.cpp: In function ‘int* myfind2(const std::vector<int>&, int)’:
main.cpp:9:20: warning: address of local variable ‘x’ returned [-Wreturn-local-addr]
    9 |             return &x;
      |                    ^~
main.cpp:7:14: note: declared here
    7 |     for (int x: vec) {
      |              ^
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 20:22:20 | 显示全部楼层
人造人 发表于 2022-2-11 19:07
返回局部变量的地址?

抱歉,失误了
#include <iostream>
#include <vector>

using std::cout, std::endl, std::vector;

int* myfind2(const vector<int>& vec, int value) {
    int n = 0;
    for (int x: vec) {
        if (x == value) {
            return (int*)&vec[n];
        }
        n++;
    }
    return NULL;
}

int main() {
    vector<int>arr = { 13, 2, 3, 17, 5 };
    int x = 3, y = 17;
    int* p = myfind2(arr, x), *q = myfind2(arr, y);
    cout << *p << endl;
    cout << *q << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 13:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表