c++ - 为什么 &vector_char[0] 打印所有字符?
问题描述
我一直在分析代码,我遇到了这个:
...
vector <char> buffer (size + 1);
vsnprintf (& buffer [0], buffer.size (), format, args);
printf (& buffer [0]);
...
所以我想知道为什么它会打印所有字符,并且在 vnsprintft 函数中,传递了对向量第一个元素的引用
解决方案
因此,正如其他人所提到的,这是因为您实际上并没有通过引用传递,而是实际上传递了地址。这是因为&
在不同的语境中有不同的含义。
在函数声明上下文中,它意味着通过引用传递:
void myFunc(int& i) { // << pass by reference
std::cout << i;
}
当你调用这样的函数时,你不需要&
:
int main () {
int i = 3;
myFunc(i); // << still passing by reference even though you aren't using the & here
return 0;
}
另一方面,在调用&
函数时使用 an意味着获取该变量的地址。就像这样做:
int main () {
int i = 3;
int * ptr = &i; // gets the address of i
return 0;
}
在这里,我们得到一个指向 的指针i
,而不是对它的引用。
函数也是一样的。这是一个函数示例:
void myFunc(int* i) { // << passing the address of a variable
if(i != nullptr) {
std::cout << *i;
}
}
int main () {
int i = 3;
myFunc(&i); // << Now we're passing the address of i
return 0;
}
这是正在发生的事情的第一部分。
那么,为什么这会导致打印所有字符呢?好吧,你基本上遇到了这个问题,你和字符指针之间只有几层。如其中一个答案中所述,char *
s 是表示字符串的一种旧方式。因此,许多函数将char*
其视为字符串,而不是单个字符。
那么,您如何char *
从a 中获得 a std::vector
?好吧,只要说你是通过使用&
. 由于std::vector
s 具有连续记忆,因此您基本上以有效的char *
.
推荐阅读
- javascript - 将 javascript 与 php 一起使用时未显示消息
- java - Java 为可配置的 html 解析 .dat 文件值
- ruby-on-rails - 我应该在rails api中为公共用户和当前用户创建单独的端点吗
- python-3.x - 正则表达式匹配 8 位电话,每个数字之间有可选的连字符
- sql - 在 SQL 中透视具有一行的表
- docker - 为 Redis 实例分配多少内存/CPU?
- typescript - 从 Next.JS 上的绝对路径导入内联 SVG
- ios - 如果应用程序是通过 Fastlane 捆绑的,它会在启动时崩溃
- python - 如何使用 Marshmallow / SQLAlchemy 仅将外键加载到嵌套字段中
- javascript - javascript中的删除运算符如何工作?