1. 程式人生 > >C++獲取陣列長度

C++獲取陣列長度

一、靜態陣列。

比如 int int_ary[5] ,靜態陣列在編譯的時候就知道了陣列長度,這對編譯器來說挺好實現的。

用得最多的大概就是sizeof了吧:

1 #define countof_macro(x) (sizeof((x)) / sizeof(x)[0])

對於C++,可以用模板。

如果將陣列作為函式形參的話,它會退化成一個指標,但是引用則不會。使用引用帶來的另外一個問題就是,宣告引數時必須知道陣列長度——我要是知道我還費這勁幹啥?解決方法就是使用模板,將陣列引用的陣列大小宣告為模板引數:

1 2 3 4 5 6 7 8 9 10 11 12 //錯誤的做法:這裡形參已經退化為指標了 int countof_func_para(int int_ary[5]) { return countof_macro(int_ary); } //正確的做法 template<size_t n> int countof_template(const int (&int_ary)[N]) { return N; }

二、動態陣列。

動態陣列的長度可以在執行時指定,所以編譯器也不知道它的長度。但是作業系統總該是知道的,不然釋放的時候就知道該釋放多少記憶體了。在VC中,提供了這樣的函式用來獲取由calloc

malloc, 或者 realloc分配的記憶體的長度(bytes)。另,據說Borland C和GCC也實現了這個函式。

1 size_t _msize(void *);

注意:若傳進去的指標不是指向堆裡的區域的話,Debug版會有assertion failed。

相關推薦

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

C/C++ 獲取陣列的有效長度

(1)字元陣列。採用如下strlen()最簡單。char b[] = "abc"; cout << strlen(b) << endl;輸出3注意:儲存字串的字元陣列末尾有一個'

c++ 獲取陣列長度

//獲得陣列的長度 template<typename T> int count(T& x) {     int s1 = sizeof(x);     int s2 = sizeof(x[0]);     int result = s1 / s2;  

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

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

C陣列長度

c語言中,定義陣列後可以用sizeof命令獲得陣列的長度(可容納元素個數) #include<stdio.h> int main(){ int a[] = {12,45,36,5,6}; int length = sizeof(a)/sizeof(a[0])

sizeof獲取陣列長度

昨天開始看《演算法導論》這本書,第一個演算法就是(直接)插入排序,根據書裡給出的虛擬碼寫出了C語言程式碼,也根據自己的理解重新寫了一個。雖然實現了演算法的基本要求,但有些細節沒有處理好,今天就來完善一下。在昨天實現的程式碼中,用來測試的陣列int array[] = {5,2

C#獲取陣列的行數和列數

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test02 {     class Program     {        

php獲取陣列長度函式

PHP中獲取陣列長度:count()函式、sizeof()函式 獲取二維陣列長度: count()函式有兩個引數: count($arr,COUNT_NORMAL);//預設,不檢測多維陣列 count($arr,COUNT_RECURSIVE);//檢測多維陣列 例子: $arr = array( 0=

JSTL獲取陣列長度或字串長度

<%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn” %> lili{string} ${fn:length{string||li)}

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])

luajit使用ffi時自動獲取C中定義的陣列長度

    在使用luajit的ffi.cdef定義的struct C結構體時,部分欄位使用陣列的方式定義,查遍了各種資料,沒有找到如何自動獲取陣列長度的方法。如有哪位大牛知道其他簡單的辦法獲取陣列長度的,煩告知。先感謝了。     以下是我通過lua的字串匹配方式獲取陣列長度

C++輸入獲取未知長度的行輸入陣列 與 輸出控制

標頭檔案 #include <iostream> 程式的輸入都建有一個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有

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

C、C++中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了一個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof(array) / sizeof(array[0]), 在C語言中習慣上在 使用時都把它定義

c/c++ 獲取數組長度

使用 c語言 out 定義 fine arr char nbsp 數組 在C/C++中並沒有提供直接獲取數組長度的函數 c/c++ 獲取數組長度其中一種方法是使用sizeof(array) / sizeof(array[0])。 在C語言中習慣上在使用時都把它定義成一個

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

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

c++ 在指定長度陣列或者容器中,統計元素出現的次數(count)

  #include <iostream> // cout #include <algorithm> // count #include <vector> // vector using namespace std; int ma

[c#美味]使用Http Head方法獲取檔案長度

需求 有一個固定URL的檔案,伺服器端程式會定期的更新這個檔案,現在需要寫一個工具來監控這個檔案的變化。   解決辦法 最初我想到的是把這個檔案下載下來,然後通過大小來判斷檔案是否改變(已知該檔案變化時大小會變化)。 但是這個檔案有時會很大,如果每次都下載下來會消耗一定

C/C++獲取二維陣列行列數

對於type array[A][B];形式的二維陣列,可以通過計算sizeof獲取行列數。 sizeof(array[0][0])為一個元素佔用的空間, sizeof(array[0])為一行元素佔用的空間, sizeof(array)為整個陣列佔用的空間, 行數 = sizeof(ar