音視頻 day21 數組和指針的區別、值傳遞和地址傳遞

1. 如何理解視頻中的 linesize ??

image.png

2. C 語言中的 long 是什麼類型?浮點型用什麼表示?

  • long 是整型,是 long int 的縮寫
  • 浮點型用 float、double 表示

2、C++ 值傳遞、指針傳遞、引用傳遞

1. 簡述什麼是值傳遞?

  • 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。
  • 從被調用函數的角度來講,值傳遞是單向的(實參-->形參),參數的值只能傳入,不能傳出。

2. 簡述什麼是指針傳遞?

  • 形參爲指向實參地址的指針,當對形參的指向操做時,就至關於對實參自己進行的操做。

3. 簡述什麼是引用傳遞?

  • 形參至關因而實參的別名,對於形參的操做其實就是對實參的操做。

4. 若是對值傳遞、指針傳遞、引用傳遞概念模糊的時候,建議練習一下下面的代碼?

#include <iostream>

using namespace std;

// 值傳遞
void change1(int n) {
 cout << "值傳遞--函數操做地址:" << &n << endl;
 n++;
}

// 引用傳遞
void change2(int &n) {
 cout << "引用傳遞--函數操做地址:" << &n << endl;
 n++;
}

// 指針傳遞
void change3(int *n) {
 cout << "指針傳遞--函數操做地址:" << n << endl;
 *n = (*n + 1);
}

int n = 10;
int main(){
 
 cout << "實參的地址" << &n << endl;
 change1(n);
 cout<<"after change1() n="<<n<<endl;
 change2(n);
 cout<<"after change2() n="<<n<<endl;
 change3(&n);
 cout<<"after change3() n="<<n<<endl;
 
 int *p = &n;
 cout << "p:" << p << endl;
 
 change3(p);
 cout<<"after change3() n="<<n<<endl;
 
 return 0;
}

複製代碼

3、從訪問角度上看待數組和指針的區別?

1. What's a Declaration? What's a Definition? 在 C 語言中,什麼是聲明?什麼是定義?

  • 聲明 Declaration:描述在其餘地方建立的對象,並不分配內存。(能夠出如今多個地方)
  • 定義 Definition:產生一個新的對象,並分配內存。(只能出現一次)

2. 注意一下 「地址y」 和 「地址y的內容」 的區別?

「地址y」 表示變量y在內存中的地址,而 「地址y的內容」 指的是位於這個地址中的內容,也就是變量y的值。大多數編程語言中用同一個符號表示這兩個東西,而由編譯器根據上下文環境判斷它的含義。以下圖ios

image.png

  • 上文中的x指的是x所表明的地址,而y的含義是y的內容。
  • 出如今賦值符號左邊的值稱爲左值、賦值符號右邊的稱爲右值。編譯器爲每一個變量分配地址(左值)。這個地址在編譯時可知且一直存在,而它的右值在運行時才能知道。通俗說:每一個變量都有一個地址,這個地址在編譯時能夠知道,而地址裏存儲的內容(也就是變量的值)只有在運行時才能知道。若是須要用到變量的值,(也就是已知地址存儲的值)那麼編譯器發出指令從指定地址讀入變量值並放入相應寄存器中。

3. 直接使用數組名字訪問數組元素的過程

image.png

  • ① a 所表明的地址就是 9980 ② (9980+i)便可得到須要訪問的數據

4. 使用數組指針訪問數組元素的過程

image.png

  • ①指針 p 所在的地址是 4624 ②取出地址 4624 所存儲的地址 5081 ③(5081+i)便可得到須要訪問的數據

5. 總結 數組名字數組指針 訪問數組元素過程的區別?

  • 若是是數組 a[],那麼能夠直接用數組名來訪問數組中的元素,由於它的內容就是第一個元素,他的下一個地址也就對應了下一個元素的地址。
  • 若是是指針 *a,先要取出 a 的內容,再把它做爲變量的地址並從這個地址中取得變量的內容。

5. C 語言的數組形參是指針嗎?爲何?(很是重要)

  • C 語言會把數組形參當成指針
  • 把做爲形參的數組當作指針來考慮實際上是出於效率考慮。C 語言彙總,全部非數組形式的數據實參均爲值傳遞形式
  • 而對於數組,若是每次調用函數都要拷貝整個數組的話,就會花費大量的性能和空間開銷,因此對於數組,C 語言的機制是告訴函數數組的首地址,直接對數組進行操做。
相關文章
相關標籤/搜索