陣列作為形參退化為指標
一個小程式進行驗證
#include<stdio.h>
void Sizeof(int arr[])
{
printf("%d\n",sizeof(arr));
}
int main(void)
{
int arr[] = {1,2,3,4,5};
printf("傳入Sizeof()函式進行計算:\n");
Sizeof(arr);
printf("為傳入Sizeof()函式直接在主函式中進行計算:\n");
printf("%d\n",sizeof(arr));
}
在程式碼中可以看到,主函式與Sizeof函式執行了同樣的計算。即計算陣列的大小,但是結果卻是始料未及的。
出現這樣的結果其原因就是在函式中,當陣列作為形式引數進行傳參時,其意義發生了變化。將其解析為一個指標,而指標的大小為四個位元組。此時將陣列作為一個指標型別進行計算。
相關推薦
陣列作為形參退化為指標
一個小程式進行驗證 #include<stdio.h> void Sizeof(int arr[]) { printf("%d\n",sizeof(arr)); } in
C++中陣列作為形參時,實際傳的是指標
傳陣列時,實際上是建立了臨時的指標變數,指向傳進去的那個陣列。在函式中改變形引數組(臨時指標變數)的指向是可以的,只不過這樣做不會改變原來的陣列 //例子說明陣列做形參時,實際上是用一個臨時指標變數做形參,指向傳進去的陣列首地址。實際的陣列是常指標,不能改變它的值。 #i
在函式中以陣列作為形參
說明: 陣列的兩個特殊性質對我們定義和使用作用在陣列上的函式有影響,這兩個性質分別是: 不允許拷貝陣列; 使用陣列時通常會將其轉換成指標。 因為不能拷貝陣列,所以我們無法以值傳遞的方式使用陣列引數。 因為陣列會被轉換成指標,所以當我們為函式傳遞一個
二維陣列作為形參如何呼叫
在做Leetcode第 題:有效的數獨中,遇到這樣一個問題:題目給出這樣一個函式 bool isValidSudoku(char** board, int boardRowSize, int boardColSize),很顯然三個形參分別是二維陣列的陣列
C++陣列作為形參傳遞給函式
以下三種形式等價 void function(const int *arg); void function(const int arg[]); void function(const int arg[
二維陣列作為形參--傳值的3三種方式
二維陣列作為形參傳值的3種方式 在記憶體中二維陣列是按照行主序進行儲存的,從記憶體的角度上看,二維陣列本質就是一個一維陣列。如果把二維陣列的每一行看成一個整體,即看成一個數組中的一個元素,那麼整個二維陣列就是一個一維陣列。而二維陣列的名字代表二維陣列第0行的首
JAVA方法中陣列作為形參,傳的是引用
之前一直以為傳陣列和基本型別都是傳的值,今天做題時發現傳陣列傳的其實是引用。 public class Tests { public static void main(String[]
陣列做函式引數退化為指標
#include "stdio.h" #include "stdlib.h" #include "string.h" void printfArray(int *a) { int i = 0;
C++引用形參+模板---解決陣列指標退化為指標
C/C++中如果一個函式接受一個數組作為引數,那麼陣列將會被退化為指標,如果定義如下程式碼: //陣列arr的大小未知。 int arrsize(int arr*) { cout << "element num : " << siz
c 陣列做為形參時 該引數退化為指標
當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。 傳陣列給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。 void func(int array[10]) vo
陣列指標作為形參傳遞
當陣列作為函式形參時,陣列的地址可以用做函式呼叫的實參。 可以通過陣列地址的傳遞,在函式內可以對該陣列進行訪問和修改。 eg: #include <stdio.h> #define SI
C語言中陣列指標 作為形參
2015 0605 在修改程式的過程中,看到兩種將陣列作為形參的方法,於是搜了一下,找了一下比較全面地介紹陣列指標的文章。 先寫下我遇到的兩種方式: 方式1: void filter_c(long double *,long double *,float *,int);//
指標陣列和行指標作為形參時的區別
用指標陣列作為形參時的表示方法: #include <stdio.h> void fun(int *p[3],int n) { int i,j; for(i=0;i<3;i++) for(j=0;j<n;j++) printf("%d
指標作為形參進行傳遞注意事項
一個例子 #include<iostream> using namespace std; int m_value = 1; void func(int *p) { p = &m_value; } int main(int
C語言指標作為形參的例子
編寫子函動態申請記憶體,並將記憶體地址返回供主函式使用; 程式碼如下: #include<stdio.h> #include<malloc.h> int getData(float **data_buffer,int *data_
C語言指標作為形參的一些問題
指標作為形參肯定有很多都不清楚其中具體的原理,我也是最近摸清了些門道: 下面就用一些例子來給大家說明: void myMalloc(char *s) //我想在函式中分配記憶體,再返回 { s=(char *) malloc(100); } void m
陣列名作為函式引數時會退化為指標
void arraySum(int a[],int b[]) { cout < <"sizeof(a)" < <sizeof(a) < <endl; cout < <"sizeof(a[0])" < <si
C\C++三級指標作為形參
二級指標和三級指標作為形參的具體應用: 二級指標作為形參時,記憶體分配在函式外進行。函式內只需要進行相關操作;三級指標作為形參時,可以在函式內分配空間。三級指標作為形參程式碼:int skinDetect(unsigned char *frame, int _width
習題 9.8 修改第6題的程式,增加一個fun函式,改寫main函式。改為在fun函式中呼叫change和display函式。在fun函式中使用物件的引用(Student &)作為形參。
C++程式設計(第三版) 譚浩強 習題9.8 個人設計 習題 9.8 修改第6題的程式,增加一個fun函式,改寫main函式。改為在fun函式中呼叫change和display函式。在fun函式中
指標和引用作為形參的區別
引用做函式的形參:在函式內部,對這個形參做任何操作,相當於對實參做相同的操作。 指標做函式的形參:在函式內部,只有在這個形參的值沒有變化的情況下,對其所指向的內容做任何操作,才相當於對實參所指向內容做的操作。而對這個指標本身做的操作只是這個形