快捷搜索: 王者荣耀 脱发

对C语言中sizeof的理解

在使用gdk3写我的第一个互联网程序--闪闪星光时,遇到了用sizeof统计字符串的个数的问题,简化一下问题,如下图所示

得到的结果和我预想的差别很大,当时张银奎老师对我说让我换成strlen去求字符串的长度,然后就成功了,所以我就去了解了一下sizeof的一些具体使用。

#include <iostream>
using namespace std;
void show1(const char* str)
{
	cout << "*********func1*********" << endl;
	cout << sizeof(str) << endl;
	cout << "*********end*********" << endl;
}
void show2(char array[])
{
	cout << "*********func2*********" << endl;
	cout << sizeof(array) << endl;
	cout << "*********end*********" << endl;
}
int main()
{
	cout << "*********main*********" << endl;
	char a[] = "gdksdk";
	cout << sizeof(a) << endl;
	show1(a);
	show2(a);
	return 0;

}
    sizeof不是一个函数,实际上它只是一个操作符,只是使用方式看起来的确像是一个函数,通常情况下,sizeof运算符可以应用于常量、变量和表达式,sizeof表达式的值是一个无符号的整数,代表储存属于类型名的值所需要的字节数,sizeof应用于表达式时不要求圆括号,比如我们可以用sizeof i 代替sizeof(i),但是sizeof作为一元运算符的优先级高于二元运算符,例如,编译器会将sizeof i+j解释成sizeof(i) +j,所以为了避免出现这种问题,我们应该在sizeof表达式中始终加上圆括号。 对于静态数组来说,sizeof可以直接计算数组的大小,比如上图我们求的sizeof(a)的运算。 指针可以看为变量类型的一种,所有的指针变量进行sizeof的操作结果均为4,所以上图中我们进行的sizeof(str)运算,得到的就是指针所占的字节数。 数组名在作为函数的形参时,在函数体内,它仅仅只是一个指针,可以做自增、自减等操作,即数组名作为函数形参的时候,成为了只有4个字节的指针。所以此时将形参中的数组名进行sizeof操作的话,得到的结果为4.
经验分享 程序员 微信小程序 职场和发展