1. 程式人生 > >陣列名作為函式引數時會退化為指標

陣列名作為函式引數時會退化為指標



void arraySum(int a[],int b[]) 

cout < <"sizeof(a)" < <sizeof(a) < <endl; 
cout < <"sizeof(a[0])" < <sizeof(int) < <endl; 
int length_a = sizeof(a)/sizeof(int); 


}


// 等價於:
void arraySum(int *a,int *b) 

cout < <"sizeof(a)" < <sizeof(a) < <endl; 
cout < <"sizeof(a[0])" < <sizeof(int) < <endl; 
int length_a = sizeof(a)/sizeof(int); 


}

最近在自己寫一些小函式,有用到陣列名作為引數的情況,在這裡記錄下學習過程。

陣列名作函式的引數,必須遵循以下原則:
(1)如果形參是陣列形式,則實參必須是實際的陣列名,如果實參是陣列名,則形參可以是同樣維數的陣列名或指標。
(2)要在主調函式和被調函式中分別定義陣列。
(3)實引數組和形引數組必須型別相同,形引數組可以不指明長度。
(4)在C語言中,陣列名除作為變數的識別符號之外,陣列名還代表了該陣列在記憶體中的起始地址,因此,當陣列名作函式引數時,實參與形參之間不是"值傳遞",而是"地址傳遞",實引數組名將該陣列的起始地址傳遞給形引數組,兩個陣列共享一段記憶體單元,編譯系統不再為形引數組分配儲存單元。


相關推薦

陣列名作函式引數時會退化指標

void arraySum(int a[],int b[])  {  cout < <"sizeof(a)" < <sizeof(a) < <endl;  cout < <"sizeof(a[0])" < <si

陣列函式引數退化問題

氣泡排序 #include "stdlib.h" #include "string.h" #include "stdio.h" void printArray(int* a) { for (size_t i = 0; i < 6; i++) { printf("%d\n", a[

物件做函式引數和異常的區別

把一個物件傳遞給函式或一個物件呼叫虛擬函式與把一個物件做為異常丟擲,這之間有三個主要區別。第一、異常物件在傳遞時總被進行拷貝;當通過傳值方式捕獲時,異常物件被拷貝了兩次。物件做為引數傳遞給函式時不一定需要被拷貝。第二、物

陣列名做函式引數(轉)

可以用陣列名作函式引數,此時實參與形參都應用陣列名(或指標變數)。 例2:有一個一維陣列score,內放10個學生成績,求平均成績。 float average(float array[10]){ int i; float aver,sum=array[0]; for(i

C++ 字串 14-- 18.40.結構體與函式 結構體作為函式引數、結構體指標作為函式返回值

#include <iostream> #include <string> using namespace std; /*--------------------------------- 18.40.結構體與函式 結構體作為函式引數、結構體指標作為

陣列函式引數退化指標

#include "stdio.h" #include "stdlib.h" #include "string.h" void printfArray(int *a) { int i = 0;

java 11:陣列作為函式引數陣列函式返回值

1 陣列作為引數 我們可以將陣列作為引數,傳入到函式中,其實就像我們main函式中 public void main(String [] args){};就是用陣列作為函式引數; 又如, publicclass ArrayPar  {  publicstaticvoid

shell 函式引數陣列傳遞

You cannot pass an array, you can only pass its elements (i.e. the expanded array). #! /bin/bashfunction f(){ a=("[email protected]")((last_idx=

C語言中用陣列名作引數能改變實引數組的值的理解

很多初學者不理解為什麼C語言中用陣列名作為引數能改變實引數組的值,現在來談談我的理解: 把實引數組傳遞給函式,則形參從陣列哪裡得到了其實地址,因此陣列與實引數組共佔了同一段記憶體單元,在函式呼叫期間,該變了形引數組的值,也就改變了實引數組的值。 現在問題來了,怎麼理解

c 陣列形參時 該引數退化指標

當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。 傳陣列給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。 void func(int array[10]) vo

模板巢狀類別名作函式返回型別,可能會提示的編譯錯誤

  模板巢狀類別名作為函式返回型別,可能會提示的編譯錯誤 1 #include <iostream> 2 using namespace std; 3 4 template<typename ElementType> 5 class B 6 { 7

Python踩坑之可變引數函式,如何動態傳遞多個引數進去

1、使用*(self.installAppPaths)搞定,一開始我就是想要動態傳遞多個 Tkinter.OptionMenu(self.root, self.box_variable, *(self.installAppPaths),command = self.box_list_clic

JS判斷一個是否函式或者陣列(資料型別的判斷)

如下程式碼所示: 有幾個細節要注意 1)typeof(arr) === ‘object’ 使用typeof陣列,得到的是一個object,而不 是返回Array或者array 2)console.info(1 instanceof Number) //fal

陣列維度以及陣列名作右值

一.使用一級指標、一層迴圈遍歷一維陣列 這個不必多言,此時的陣列名即為一級指標常量。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(int

關於字串replace方法第二個引數函式的用法

比如把“<>”換成轉義符 function escapeHtml(str){   return str.replace("/[<>]/g",function(word,idx){     //注:第一個引數為匹配的字串,第二個引數為匹配到的索引標     switch(word

C#呼叫非託管函式引數Void* 時,方法

This sample demonstrates how to pass data to an unmanaged function that expects a void pointer as an argument. The sample provides two solutions. The Voi

bitcount函式統計其整數引數的值1的二進位制位的個數

/* bitcount: count 1 bits in x */ int bitcount(unsigned x) { int b; for (b = 0; x != 0; x >>= 1) if (x & 01)

一個長度N的陣列中包含正數 負數 0,請實現一個函式找出和0的最長子數列

<strong><span style="font-size:18px;">// #include<iostream> #include<vector>

陣列作為形參退化指標

一個小程式進行驗證 #include<stdio.h> void Sizeof(int arr[]) { printf("%d\n",sizeof(arr)); } in