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>