16功能之sizeof的使用
1 参数不同代表的意义
1)sizeof参数为数组: 长度类型 。注:当数组是字符串类型,strlen出的长度需要+1。
2)sizeof参数为值: 该值的类型。
3)sizeof参数为地址: 为该指针类型。
4)sizeof参数为数组作形参时的大小: 为对应类型指针的大小,void时需注意电脑位数。
2 代码测试
#pragma warning(disable:4996)
#include<iostream>
using namespace std;
//数组形参大小
void fun(void* vStr, int iBuf[], int *iStr, char cBuf[], char *cStr) {
cout << sizeof(vStr) << endl; //4 Windows32下为4字节
cout << sizeof(iBuf) << endl; //4 形参为数组时 大小为该类型指针大小 即下面的str
cout << sizeof(iStr) << endl; //4
cout << sizeof(cBuf) << endl; //4
cout << sizeof(cStr) << endl; //4
}
void test01() {
//注:下面为Windows32 指针为4字节 64位为8字节
char buf1[] = "Hello1"; //均为Hello1
char *p = buf1;
int arr[3] = { 1,2,3 };
int *i = arr;
//1 sizeof参数为数组: 长度*类型 注:当数组是字符串类型,strlen出的长度需要+1
cout << strlen(buf1) << endl; //6
cout << sizeof(buf1) << endl; //7 包括0,strcpy也会拷贝0,但strlen不计算0的长度,所以需要+1
cout << sizeof(arr) << endl; //12 3*4=12
cout << "================" << endl;
//2 sizeof参数为值: 该值的类型
cout << sizeof(p[0]) << endl; //1 p[0]索引后为值 求该值的类型大小 即H
cout << sizeof(arr[0]) << endl; //4
cout << "================" << endl;
//3 sizeof参数为地址: 为该指针类型
cout << sizeof(p) << endl; //4 p存的是首地址 sizeof(地址)代表求指针本身
cout << sizeof(p + 1) << endl; //4
cout << sizeof(i) << endl; //4 sizeof(地址)代表求指针本身
cout << sizeof(i + 3) << endl; //4
cout << "================" << endl;
//4 求数组作形参时的大小: 为对应类型指针的大小,void*时需注意电脑位数
fun(NULL, NULL, NULL, NULL, NULL);
}
int main() {
test01();
return 0;
}