关于sizeof相关注意点

简介: strlen是专门用来求字符串长度的,统计的是’\0’之前出现的字符个数,一定要找到’\0’才能结束,所以如果没有\0可能会存在越界访问问题

总结一下sizeof操作符的一些容易忽略的知识


1.sizeof( )内部不参与运算,内部不会真实访问空间,不会进行计算的


int main()
{
  short s = 3;
  int a = 12;
  printf("%d", sizeof(s = a + 2));
  printf("%d", s);
  return 0;
}

93cfc2e33213460ebeeae950c0594ce7.png


解析:


int main()
{
  short s = 3;//短整形
  int a = 12;//整形
  printf("%d", sizeof(s = a + 2));
  //a是整形,2是整形,相加还是整形,但s是短整形,所以最后的类型还是短整形
  //内部不会真实的进行a+2这个计算
  printf("%d", s);
  //s还是3;
  return 0;


2.sizeof()是根据类型来计算大小的,如果知道类型就知道大小


例子:


int main()
{
  int a = 10;
  printf("%d\n", sizeof(a));
  printf("%d\n", sizeof(int));
  return 0;
}

2e3229029a044a53af6ad5deb436fa63.png


例子:


int main()
{
  int arr[3][4] = { 0 };
  printf("%d", sizeof(arr[3]));
  return 0;
}

cc0cc17885fd42abb7d9ab02eed6e1b1.png


解析:


int main()
{
  int arr[3][4] = { 0 };
  //二维数组3行四列
  printf("%d", sizeof(arr[3]));
  //arr[3]表示第四行数组名,可能你们会想这个数组不是才有3行吗,这不是越界访问了吗
  //其实不是的喔,假设这个数组有第四行,那么size(第四行数组名)表示计算的第四行整个大小为16
  //想一下,sizeof()其实不会访问真实的空间,它是根据这个arr[3]这个类型来进行判断的
  //第四行类型跟第一行第二行第三行类型是一样的都是int[4]类型所以计算出来大小为16.
  return 0;
}


3.sizeof VS strlen


1.sizeof只关注占用内存空间的大小,单位是字节,不关心内存中存放的是什么

2.strlen是专门用来求字符串长度的,统计的是’\0’之前出现的字符个数,一定要找到’\0’才能结束,所以如果没有\0可能会存在越界访问问题

3.sizeof是操作符而strlen是库函数

相关文章
|
6月前
|
编译器 C语言
sizeof,sizeof与strlen的区别
sizeof,sizeof与strlen的区别
56 0
sizeof,sizeof与strlen的区别
|
5月前
|
C语言
sizeof
【6月更文挑战第17天】
63 1
strlen和sizeof详解
strlen和sizeof详解
86 0
|
6月前
|
存储 C语言
关于sizeof介绍与分享给大家介绍
关于sizeof介绍与分享给大家介绍
sizeof和strlen的对比
sizeof和strlen的对比
51 0
|
存储 编译器 C++
C++ sizeof 的介绍
C++ sizeof 的介绍
113 0
sizeof与strlen练习
sizeof与strlen练习
51 0