1. 程式人生 > >C/C++中如何獲取陣列的長度?

C/C++中如何獲取陣列的長度?

C、C++中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了一個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof(array) / sizeof(array[0]), 在C語言中習慣上在 使用時都把它定義成一個巨集,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中則可以使用模板 技術定義一個函式,比如:

template <class T>

int getArrayLen(T& array)

{

return (sizeof(array) / sizeof(array[0]));

}

這樣對於不同型別的數 組都可以使用這個巨集或者這個函式來獲取陣列的長度了。以下是兩個Demo程式,一個C語言的,一個C++的:

P.S:若陣列為儲存 字串的字元陣列,則所求得的長度還需要減一,即對於巨集定義: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]) - 1 );} ,對於函式定義:

template <class T>

int getArrayLen(T& array)

{

return (sizeof(array) / sizeof(array[0]) - 1);

}

原因為儲存字串的字 符陣列末尾有一個'/0'字元,需要去掉它。

【C語言】

#include <stdio.h>

#include <stdlib.h>

#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}

//定義一個帶引數的 巨集,將陣列長度儲存在變數len中

int main()

{

char a[] = {'1','2','3','4'};

int len;

GET_ARRAY_LEN(a,len)

//呼叫預定義的巨集,取得陣列a的長度,並將其儲存在變數len中

printf("%d/n",len);

system("pause");

return 0;

}

【C++】

#include <iostream>

using namespace std;

template <class T>

int getArrayLen(T& array)

{//使用模板定義一 個函式getArrayLen,該函式將返回陣列array的長度

return (sizeof(array) / sizeof(array[0]));

}

int main()

{

char a[] = {'1','2','3'};

cout << getArrayLen(a) << endl;

return 0;

} 另: 在c++的函式裡面,如果把一個數組作為引數傳進去,那麼這個陣列就會退化為一個指標,因而就不知道這個陣列的長度(這裡的陣列指的是靜態的而不是new出來的).

相關推薦

c語言獲取陣列長度寫法

首先對於一維陣列,如: char a[]={1,2,3,4};int b[]={1,2,3,4,5};float c[]={1.0,2.0,3.0};如何求取這些陣列的長度呢?可以使用sizeof(),但由於sizeof()返回的是位元組長度,所以可以使用sizeof(x)/sizeof((x)[0])

c語言陣列長度

例如: <span style="font-size:24px;">#include <stdio.h> #include <string.h> #define n 20 int main(){ char arr[n];

c/c++獲取陣列長度的函式

在c/c++中由於陣列作為函式引數傳遞時會退化為指標,所以在進行陣列長度計算時具有一定難度。常用的兩種技術有: 一.巨集定義:     #define GET_ARRAY_LEN(array,len){len=sizeof(array)/sizeof(array[0]);}

c++ 獲取陣列長度

1、對於陣列或者傳遞的陣列引數,可以直接使用如下的巨集或者類似的函式來獲取。 #define getArrayLen(array,len) {len = sizeof(array)/sizeof(array[0]);} 2、對於指向陣列的指標,可以通過指標來獲取陣列大小。 需要先了解下陣列申

C++獲取陣列長度

一、靜態陣列。 比如 int int_ary[5] ,靜態陣列在編譯的時候就知道了陣列長度,這對編譯器來說挺好實現的。 用得最多的大概就是sizeof了吧: 1 #define countof_macro(x) (sizeof((x)) / sizeof(x)[0]) 對於

C++獲取陣列長度的方法

在不使用其他容器的情況下,用sizeof關鍵字來獲取陣列長度:template <class T> int length(T& a) { return sizeof(a) / sizeof(a[0]); }注意,目前就發現上面這一種方法,使用時直接用le

g++ 記憶體分配 與 c 語言陣列越界問題 (一道有趣的面試題)

首先是一段程式: # include <stdio.h> int main(int argc, char* argv[]){ int i = 0; int arr[3] = {0}; for(; i<=3; i++){ arr[i]

C++使用變數作為陣列長度

C++中一般是不能使用變數作為一個數組的長度的,必須使用常量。 這是因為陣列作為C++的內建資料型別,其空間分配在棧記憶體中,這部分空間的大小在編譯時就要確定,不能等到執行時再分配。常量的值在編譯時就能得到,而變數的值在執行時才能確定。 但是仍然有辦法使用變數作為陣列的長度:繞過棧記憶體

c語言指標陣列陣列指標的認識

1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分)     由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。  定義一維陣列的一般形式:型別符  陣列名【常量表達式】(陣列也

C語言求字串長度的函式my_strlen()的幾種實現方法

C語言中求字串長度的函式的幾種實現方法 1.最常用的方法是建立一個計數器,判斷是否遇到‘\0’,不是’\0’指標就往後加一。 int my_strlen(const char *str) { assert(str != NULL);//此句判段str是否為空指標(事實上這條語

C語言指標陣列的記憶體地址

char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);

c語言陣列名代表的意義

陣列名是陣列的首地址,就是陣列中的第一個元素的地址,是常量。常量是不能值在=的左邊的。陣列和指標的區別在於,指標是變數,是用來儲存指向資料的地址的變數,而陣列名是常量。一般情況下申明一個數組,比如char  a[10]; 之後  陣列名a都是陣列的首地址,是一個地址常量。但

關於C語言陣列指標、指標陣列以及二級指標

概念解釋 陣列指標:首先它是一個指標,它指向一個數組,即指向陣列的指標;在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。陣列指標指向的是陣列中的一個具體元素,而不是整個陣列,所以陣列指標的型別和陣列元素的型別有關。 指標陣列:首先

shell獲取字串長度的方法,獲取陣列元素個數,獲取陣列元素,陣列遍歷

有一個變數var,其值為abbbbsdadhkajsd,設它的長度為len,則用shell獲取此字串的長度,方法如下: len=${#var} 有一個數組A=(a b c d e f) ${A[0]}代表陣列A中的第一個元素a, ${A[@]}是陣列A中的全部元素, ${#

C#路徑獲取檔案全路徑、目錄、副檔名、檔名稱

1 #region 程式集 mscorlib.dll, v4.0.0.0 2 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll 3 #endreg

C語言字元陣列的初始化與賦值

1.字元陣列初始化 在C語言中,字串是當做字元陣列來處理的;所以字串有兩種宣告方式,一種是字元陣列,一種是字元指標。 字元陣列初始化 char parr[] = "zifuchuanshuzu"; char charr[] = { 'z','i',

初學Linux(二)---Linux下C語言陣列與指標

初學Linux(二)—Linux下C語言中的陣列與指標 在經過階段一的linux學習之後,我來到了階段二的Linux下的C語言程式設計,雖然學到目前linux下的C語言似乎跟之前學的C語言所差無幾,但是按照老師的話來說,C語言指標這塊尤為重要,而我在這一方面的

popen——C程式獲取Shell命令的輸出

以前在C程式中習慣用system來呼叫執行shell命令,但是這樣有個缺點,就是隻能得到執行的shell命令的返回值,如果想得到其輸出,只能通過一些間接的方法,比如修改shell命令讓它的輸出重定向到一檔案中,然後c程式再從該檔案獲取。這樣的缺點是需要磁碟操作,降低了程式的

Linux下在C語言獲取硬碟大小

        由於系統中沒有現成的程式碼可以直接獲取某個硬碟的大小,此時可以藉助popen,sscanf,fdisk命令共同完成硬碟大小的獲取。         工件原理如下,在linux中執行fdisk -l命令,獲取硬碟的詳細資訊,然後在C程式中通過popen將資訊獲

C語言字元陣列和字串指標分析

    這幾天搞Unix上的C程式,裡面用到了很多字元陣列和字串指標,我記得在學完C語言後相當一段時間裡,對指標這個東西還是模模糊糊,後來工作也沒怎麼用到過C,雖然網上這類的文章也有很多,還是決定自己在這做個小總結,也算加深下自己的印象,寫了下面的測試程式: #include <stdio.h>