聊聊c++數(shù)組名稱和sizeof的問題
一維數(shù)組名稱的用途:
可以統(tǒng)計整個數(shù)組在內(nèi)存中的長度
可以獲取數(shù)組在內(nèi)存中的首地址
示例:
int main() {
//數(shù)組名用途
//1、可以獲取整個數(shù)組占用內(nèi)存空間大小
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整個數(shù)組所占內(nèi)存空間為: " << sizeof(arr) << endl;
cout << "每個元素所占內(nèi)存空間為: " << sizeof(arr[0]) << endl;
cout << "數(shù)組的元素個數(shù)為: " << sizeof(arr) / sizeof(arr[0]) << endl;
//2、可以通過數(shù)組名獲取到數(shù)組首地址
cout << "數(shù)組首地址為: " << (int)arr << endl;
cout << "數(shù)組中第一個元素地址為: " << (int)&arr[0] << endl;
cout << "數(shù)組中第二個元素地址為: " << (int)&arr[1] << endl;
//arr = 100; 錯誤,數(shù)組名是常量,因此不可以賦值
system("pause");
return 0;
}二維數(shù)組數(shù)組名
- 查看二維數(shù)組所占內(nèi)存空間
- 獲取二維數(shù)組首地址
示例:
int main() {
//二維數(shù)組數(shù)組名
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二維數(shù)組大?。?" << sizeof(arr) << endl;
cout << "二維數(shù)組一行大?。?" << sizeof(arr[0]) << endl;
cout << "二維數(shù)組元素大小: " << sizeof(arr[0][0]) << endl;
cout << "二維數(shù)組行數(shù): " << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二維數(shù)組列數(shù): " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//地址
cout << "二維數(shù)組首地址:" << arr << endl;
cout << "二維數(shù)組第一行地址:" << arr[0] << endl;
cout << "二維數(shù)組第二行地址:" << arr[1] << endl;
cout << "二維數(shù)組第一個元素地址:" << &arr[0][0] << endl;
cout << "二維數(shù)組第二個元素地址:" << &arr[0][1] << endl;
system("pause");
return 0;
}補充:C++/C中 sizeof(指針)和sizeof(數(shù)組名)的區(qū)別
#include <iostream>
using namespace std;
template<class T>
int length(T& data)
{undefined
return sizeof(data)/sizeof(data[0]);
}
int main(){undefined
int data[]={2,45,7,8,9,23,4,6,7,8,0};
int data1[12];
int *data2 = new int[13];
char *data3 = new char[10];
cout<<length(data)<<" "<<sizeof(data[0])<<" "<<sizeof(data)<<endl;
cout<<length(data1)<<" "<<sizeof(data1[0])<<" "<<sizeof(data1)<<endl;
cout<<length(data2)<<" "<<sizeof(data2[0])<<" "<<sizeof(data2)<<endl;
cout<<length(data3)<<" "<<sizeof(data3[0])<<" "<<sizeof(data3)<<endl;
return 0;
運行結(jié)果截圖可知:
sizeof()參數(shù)為數(shù)組名和指針變量的不同,sizeof(data)=44 此處為確為數(shù)組長度。
sizeof(data2)=4此處與sizeof(data2[0])相同,但是意義卻不同。
sizeof(data2)=4得到的結(jié)果永遠是指針變量本身的大小,此處是一個指針變量,指針變量永遠為32位4字節(jié),只要是指針,大小就是4(64位機上要變成8也不一定);當聲明動態(tài)數(shù)組時一定要小心。
sizeof(data2[0])=4指針變量指向的空間的大小,此處為數(shù)組空間為int類型,類似于sizeof(int)=4,而sizeof(data3[0])=1,就類似于sizeof(char)=1。
提到了sizeof,那什么是sizeof?
首先看一下sizeof在msdn上的定義:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return這個字眼,是不是想到了函數(shù)?錯了,sizeof不是一個函數(shù),你見過給一個函數(shù)傳參數(shù),而不加括號的嗎?sizeof可以,所以sizeof不是函數(shù)。網(wǎng)上有人說sizeof是一元操作符,但是我并不這么認為,因為sizeof更像一個特殊的宏,它是在編譯階段求值的。
結(jié)論:不要把sizeof當成函數(shù),也不要看作一元操作符,把他當成一個特殊的編譯預處理。
小尾巴~~~~~~~~~~~~
為什么要寫sizeof()呢?起初是想寫寫排序算法,想把數(shù)組當作參數(shù)傳入,然后用length算出數(shù)組長度,但是失敗了,查閱資料后發(fā)現(xiàn),大部分的函數(shù)如果想要傳參數(shù)組,需要多傳一個參數(shù)即數(shù)組長度。用上邊length的方法行不通,只是傳入了一個指針而已。
到此這篇關(guān)于c++數(shù)組名稱和sizeof的文章就介紹到這了,更多相關(guān)c++ sizeof 數(shù)組名稱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于C++實現(xiàn)柏林噪聲算法(Perlin?Noise)
Perlin噪聲(Perlin?noise,又稱為柏林噪聲)指由Ken?Perlin發(fā)明的自然噪聲生成算法,具有在函數(shù)上的連續(xù)性,并可在多次調(diào)用時給出一致的數(shù)值。本文將用C++實現(xiàn)柏林噪聲算法,感興趣的可以了解一下2023-03-03

