sizeof的值返回的值到底是什么

我学指针的时候发现,64位编译会出現如下情况(当时百思不得其解,通过百度问大佬总结以下几点):

2、sizeof的值操作符能够得到一个结构的整体长度,包括因边界对齐而跳过的那些字节

sizeof的值 是操作符,而 strlen 是库函数sizeof的值 的参数可以是数据的类型,也可以是变量而 strlen 只能以结尾为 \0 的字符串作为参数;

编译器在编译时就计算出了 sizeof的值 的结果。而 strlen 函数必须在运行时才能计算出来并且 sizeof的值 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实際的长度

这是在/c/index.html上看到的一个问题下面這段小程序的本意是打印出数组中的所有成员:

但是实际的运行结果却不是这么回事。如果编译并运行这段程序的话你看不到任何输出。這是为何问题的根源其实在于C语言的类型转换。sizeof的值()运算符返回的值是unsigned int型的因此,int型的d将被自动被转换为unsigned int型但是这个转换将导致问題。因为d的初值是-1int型的-1转换为unsigned int型后是一个非常大的数字。因此for循环的第一次判断就会失败,于是for循环一次都得不到执行自然也就看鈈到任何输出了。

那么应该如何解决这个问题呢?很简单将sizeof的值()的运算结果显式转换为int即可。如下所示:

这样就能得到正确的结果了

我要回帖

更多关于 sizeof的值 的文章

 

随机推荐