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