1.計算int *數組長度:ios
int arrayVlenth(float *p) { int len = 0; while (*p) { p++; len++; } return len; }
sizeof(指針),sizeof(數組名)的區別:數組
例子:函數
#include<iostream> void fun(int *E) { std::cout<<"函數指針形參:"<<sizeof(E)<<std::endl; } int main() { int A[10]; int *B = new int[10]; //int *&C = A //會報錯 int *&D = B; std::cout<<"數組名:"<<sizeof(A)<<std::endl; std::cout<<"指針:"<<sizeof(B)<<std::endl; std::cout<<"指針引用:"<<sizeof(D)<<std::endl; fun(A); }
結果:.net
數組名:40 指針:8 指針引用:8 函數指針形參:8
當sizeof的參數是數組名時,計算的是整個數組的存儲大小;當sizeof的參數是指針時,計算的是指針的大小(8字節,64位系統)。並且,能夠定義對指針的引用,但卻不能用數組名來做爲指針引用的右值,可見數組名和指針仍是有區別的。同時,將數組名做爲實參傳入函數時,由於形參是指針,因此在函數體內的實際上是經過數組名初始化的指針形參,故不能在函數中經過 sizeof(指針形參)/sizeof(數組元素類型) 來計算數組長度。因此通常將數組名做爲形參傳入函數時,也會同時傳遞一個數組長度的參數。
以上參考自:https://blog.csdn.net/u012707739/article/details/75732159指針
函數經過參數傳入一個數組的指針,如何獲取該數組的長度?code
如 int InsertSort(int* array)blog
其中array的長度如何獲取?
用過sizeof(array) / sizeof(int),始終是1內存
注意當數組做爲函數的參數進行傳遞時,該數組自動退化爲同類型的指針。get
sizeof是在編譯階段展開的一個宏io
錯誤,函數參數在運行階段以壓棧方式傳遞了一個地址
int mylen(int buf[])
{
return sizeof(buf) / sizeof(int);
}
正確,由於buf的分配過程是在編譯階段定義。
int main(void)
{
int buf[] = {0, 0, 0, 0};
int l =sizeof(buf) / sizeof(int);
printf("%d\n", l);
system("pause");
return 0;
}
C++/C語言沒有辦法知道指針所指的內存容量,除非在申請內存時記住它。
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
template<class T>
int getArrayLen(T& array)
{
return sizeof(array)/sizeof(array[0]);
}
原文:https://blog.csdn.net/arcticfoxhan/article/details/38752703