为何C++示例传递vector首元素指针而非整个vector?
问题解答
为什么示例里用
&vec[0]传递参数?
C++的std::vector底层基于连续内存的数组实现,vec[0]是容器的第一个元素,取它的地址&vec[0]就能得到指向整个元素数组起始位置的unsigned int*指针,刚好匹配someFunc的参数类型。因为内存连续,函数拿到这个指针后,就能通过指针偏移(比如a[i]或者*(a+i))遍历所有存储的网格索引,这也对应你推测的函数遍历逻辑。写成
someFunc(&vec)可行吗?
完全不行。&vec的类型是std::vector<unsigned int>*(指向vector对象本身的指针),而someFunc要求的参数是unsigned int*(指向无符号整数数组的指针),两者类型完全不兼容,编译器会直接抛出类型不匹配的错误,根本无法通过编译。
额外补充:在C++11及之后的标准里,推荐用vec.data()替代&vec[0],两者效果一致,但data()更直观地表达了“获取底层数组指针”的意图;而且当vector为空时,&vec[0]会触发未定义行为,data()则会返回合法的空指针,安全性更高。
内容的提问来源于stack exchange,提问作者Uri Popov
相关产品推荐
相关产品推荐

