亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當函數具有特定大小的數組參數時,為什么要用指針替換它?

當函數具有特定大小的數組參數時,為什么要用指針替換它?

C++ C
心有法竹 2019-06-01 15:52:53
當函數具有特定大小的數組參數時,為什么要用指針替換它?根據下面的程序,#include <iostream>using namespace std;void foo( char a[100] ){     cout << "foo() " << sizeof( a ) << endl;}int main(){     char bar[100] = { 0 };     cout << "main() " << sizeof( bar ) << endl;     foo( bar );     return 0;}產出main() 100foo() 4為什么數組作為指向第一個元素的指針傳遞?這是C的遺產嗎?標準怎么說?為什么C+的嚴格類型安全性下降了?
查看完整描述

3 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

是。在C和C+中,不能將數組傳遞給函數。事情就是這樣。

你為什么要做普通數組?你有沒有看過boost/std::tr1::array/std::arraystd::vector?

注意,您可以將對任意長度數組的引用傳遞給函數。模板..從我的頭頂上:

template< std::size_t N >void f(char (&arr)[N]){
  std::cout << sizeof(arr) << '\n';}


查看完整回答
反對 回復 2019-06-01
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

在C/C+術語中有一個很棒的詞,用于靜態數組和函數指針-衰變..考慮以下代碼:


int intArray[] = {1, 3, 5, 7, 11}; // static array of 5 ints

//...

void f(int a[]) {

  // ...

}

// ...

f(intArray); // only pointer to the first array element is passed

int length = sizeof intArray/sizeof(int); // calculate intArray elements quantity (equals 5)

int ptrToIntSize = sizeof(*intArray); // calculate int * size on your system


查看完整回答
反對 回復 2019-06-01
  • 3 回答
  • 0 關注
  • 788 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號