c 陣列做為形參時 該引數退化為指標
當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。
傳陣列給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
所以以上三種函式宣告完全等同。
實際情況是,陣列做引數,完全無法按值傳遞。這是由C/C++函式的實現機制決定的。
通常計算陣列大小的方式如下:
int len = sizeof(arr)/sizeof(type)
利用總長度和單個元素的長度關係得到陣列的長度
但做為形參後,sizeof(arr)的長度總為4,即一個指標的長度。
為此,有兩種方法來解決這個問題:
方法1.
引數傳遞的時候,直接加上一個引數做為陣列的長度
方法2.(是錯誤的)
int *p = a[0];
int iLen = 0;
while(p != NULL)
{
iLen++;
*p++;
}
相關推薦
c 陣列做為形參時 該引數退化為指標
當陣列做為函式的形參的時候,該引數退化為指標,並且是無法直接求得陣列的大小。 傳陣列給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。 void func(int array[10]) vo
c 數組做為形參時 該參數退化為指針
pop c++ col art UNC class blog 長度 color 當數組做為函數的形參的時候,該參數退化為指針,而且是無法直接求得數組的大小。 傳數組
指標陣列做函式形參
應用場景 從程式設計角度來看,將多個字串傳遞給函式處理時,因為傳遞的是一維陣列,形參的定義比較簡單。例如,函式strsort()可對多個字串進行排序,函式頭的定義形式如下: void strsort(char *s[],int n) 形參char *s[]為字元指標陣列
C++中陣列作為形參時,實際傳的是指標
傳陣列時,實際上是建立了臨時的指標變數,指向傳進去的那個陣列。在函式中改變形引數組(臨時指標變數)的指向是可以的,只不過這樣做不會改變原來的陣列 //例子說明陣列做形參時,實際上是用一個臨時指標變數做形參,指向傳進去的陣列首地址。實際的陣列是常指標,不能改變它的值。 #i
C++中map和vector作形參時如何給定預設引數?
之前遇到過這種特殊場景, 我用static變數比較噁心地解決了問題, 其實, 有更優雅的方式:#include <iostream> #include <vector>
指標做形參時應該注意的地方
1. 指標作為形參時,不可以將指標的地址改變,比如呼叫malloc。 2. 只可以對指標指向的值做改變。 首先看以下程式: #include <stdio.h> int *swap(int *px, int *py){ int tem
定義接受二維陣列作為實參的形參時,定義時可以省略二維陣列的行數,但不能省略列數。
可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合
指標陣列和行指標作為形參時的區別
用指標陣列作為形參時的表示方法: #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
C中函數形參聲明為數組形式,它其實是指針
編譯 指針的指針 接受 printf 語言 執行 為什麽 [] while 問題描述: 1 void writelines(char *lineptr[], int nlines) 2 { 3 while(nlines-- > 0) 4 { 5
用結構體指標做函式形參實現返回多個值(fishing_6)
最近在學ST32驅動數字攝像頭OV2640的實驗,無意中遇到了函式返回多個值的情況,決定Mark一下,說不定以後就會用到,因為一般函式都是隻有一個返回值的嘛,具體如下: 首先在標頭檔案定義結構體: typed
【C++】函式的形參
前言 這些天又在複習C++,溫故知新,每次看書都會發現一些之前被自己忽視掉的知識點,所以,學習是不能止步的! 作為一種程式語言,C++最重要的兩個部分就是函式和變數,這兩者之間進行溝通便是通過引數傳遞,而引數傳遞有很多需要注意的細節,今天
C# Form.Hide()後再 Show()時,Dock不為 none的 控制元件將不會顯示。
具體原因不是很清楚,查看了下 Control 的原始碼, Hide 和Show方法只是改變了 Visible屬性,然後看了下OnVisibleChanged方法,裡面的內容比較多,我就沒細看,想來也是控制其上的子控制元件的 visible屬性,但沒看到與 dock有何關
C++過載函式 const形參 引用指標 const_cast
一般來說,對於過載函式來說,由於頂層const不影響傳入函式的物件,所有兩個函式只是頂層const的區別的話,兩個函式是等價的,定義為過載函式是非法的。 但是,另一方面,對於指標和引用來說,可以通過區分形參指向的是常量還是非常量來實現函式過載。此時的const是
C++ 基礎之 "引用形參" 和 "利用const引用避免複製" &
之前兩篇文章裡的兩個函式如下所示: //過載操作符+ Vector3 operator+(const Vector3 &a){ return Vector3(x + a.x,y + a.y,z+a.z); } //比較兩
陣列引用:C++ 陣列做引數 深入分析
"陣列引用"以避免"陣列降階"(本文曾貼於VCKBASE\C++論壇) 受[hpho]的一段模板函式的啟發,特寫此文,如有雷同,實在遺憾。 陣列降階是個討厭的事,這在C語言中是個無法解決的問題,先看一段程式碼,瞭解什麼是"陣列降階" #include <IOSTRE
C++中引用作為形參的作用
引用的申明方法:型別識別符號 &引用名 = 目標變數名; 注:1.&在此不是求地址運算,而是起標識作用 2.型別識別符號是指目標變數的型別 3.申明引用時必須同時對
一維陣列作為函式形參使用詳解
如何將一維陣列作為函式形參來使用 請看下面的程式: #include <stdio.h> void func1(int arr[]) { printf("%d\n",sizeof(a
陣列做函式引數退化為指標
#include "stdio.h" #include "stdlib.h" #include "string.h" void printfArray(int *a) { int i = 0;
C++ 引用型別const形參的用法
今天在看《C++沉思錄》後,對const引用形參的用法又有了進一步的認識。在此,想把我個人對const引用形參的了 解分享給大家。如果有不到之處,還往各位同仁指出。 第一種情況: class Tes
const 為形參的問題
問答原貼連線:http://www.openedv.com/posts/list/7105.htm 最近在移植FATFS到STM32上出現了一個問題: DRESULT disk_write ( BYTE drv,