C++ 指针、引用和函数调用

Posted

技术标签:

【中文标题】C++ 指针、引用和函数调用【英文标题】:C++ pointer, reference and function call 【发布时间】:2016-08-15 08:39:08 【问题描述】:

我真的是 C++ 新手,我对 C++ 中的指针、地址和函数调用有点困惑。

我有以下函数调用:

config.pages= avail_pages(config.books_path, &config.books.front());

配置类有多个std::vectors<uint16_t>,例如config.books 保存书籍 ID(即来自 books_path 的文件名)。

现在我想获取第一本书的可用页面(每一页都是一个文件)。因此,avail_pages 将查找 books_path 中的文件和第一本书。

第 1234 本书和第 12 页的有效路径如下所示:books_path/1234/12

std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book) 

    std::vector<uint16_t> pages;

    std::string first_book;
    first_book = books_path + std::to_string(*book); //pointer or not? string concatenation?
    boost::filesystem::path p(first_book);

     for (auto i = boost::filesystem::directory_iterator(p); i != boost::filesystem::directory_iterator(); i++)
     
             std::string s = i->path().filename().string();
             pages.push_back(std::stoi(s));
     
  return pages;

问题是:如果我使用向量函数front(),它会返回对第一个元素的引用。

    我可以这样称呼它:&amp;config.books.front() 吗?

    如何将引用传递给函数?我是否必须使用指针,例如:std::vector&lt;uint16_t&gt; avail_pages(std::string books_path, uint16_t* book)

    如何访问实际值并将其从整数转换为 字符串?

目前我在调用 front() 函数时遇到错误,这表明我不理解引用/指针的事情。 提前致谢!

【问题讨论】:

它是否总是某个容器的一部分?我的意思是您要引用的值。 为什么将book 参数作为指针传递?此外,不要通过值传递books_path(这意味着它是复制),而是将其作为常量引用传递(即const std::string&amp; books_path)。 @JoachimPileborg 感谢您不断参考的提示! 【参考方案1】:

如果您提供配置和书籍的定义会更好。 话虽如此,您需要了解向量函数front()返回对向量持有的前端对象的引用,这意味着您通常会在前端之后调用类成员。 考虑一下:

class book

public :
std::string books_path;
uint16_t book_id;
;
std::vector <book> config;
//your declared function :
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book);
//you'd call this as such :
avail_pages(config.front().books_path, &config.front().book_id);

【讨论】:

以上是关于C++ 指针、引用和函数调用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类设计总结回顾------this指针

c++类的成员函数指针如何转为普通指针

关于C++基类、派生类的引用和指针

C++ template —— 函数对象和回调(十四)

传入参数 指针 引用和 什么都不加的区别

使用函数指针调用 C++ 函数