【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法(一)

简介: 【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法(一)

【C语言】万字详解——sizeof与strlen的用法

数组名的意义


一维数组

    sizeof用法

字符数组

    sizeof用法

    strlen的用法

字符串数组

    sizeof用法

    strlen的用法

指针与字符串

    sizeof用法

    strlen用法

二维数组

    sizeof



数组意义


在讲所有东西之前,需要先明确一个关键问题


1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小, 单位是字节

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址

3.除此之外所有的数组名表示首元素的地址


一维数组


sizeof用法

   //一维数组

int a[] = { 1,2,3,4 };

printf("%d\n", sizeof(a));

printf("%d\n", sizeof(a + 0));

printf("%d\n", sizeof(*a));

printf("%d\n", sizeof(a + 1));

printf("%d\n", sizeof(a[1]));

printf("%d\n", sizeof(&a));

printf("%d\n", sizeof(*&a));

printf("%d\n", sizeof(&a + 1));

printf("%d\n", sizeof(&a[0]));

printf("%d\n", sizeof(&a[0] + 1));


运行结果:

微信图片_20220415160330.png

解:


printf("%d\n", sizeof(a));  16字节


因为int a[ ]里有4个元素,每个元素是int类型,占四个字节,所以整个数组大小为16字节


printf("%d\n", sizeof(a + 0)); 4/8字节在32/64位平台下


此时此刻的数组名a表示的是首元素地址,首元素地址+0,还是首元素地址,地址的大小为 4/8在32/64位平台下


   printf("%d\n", sizeof(*a)); 4字节


a是数组名,表示首元素地址,然后对首元素地址解引用,所以*a就是首元素,首元素是个int型,大小为4字节


printf("%d\n", sizeof(a + 1)); 4/8字节在32/64位平台下


a是数组名,表示首元素地址,a+1是第二个元素的地址,所以大小为4/8字节在32/64位平台下

printf("%d\n", sizeof(a[1])); 4字节

a[1]就是第二个元素,大小为4字节


printf("%d\n", sizeof(&a)); 大小为4/8字节在32/64位平台下

&a取出的是整个数组的地址(从数值的角度看等于首元素地址),只要是地址,大小就为4/8字节在32/64位平台下


printf("%d\n", sizeof(*&a)); 16字节


&a取出的是整个数组的地址,* &a是对整个数组的地址解引用,拿到的是整个数组,所以大小为16字节


printf("%d\n", sizeof(&a + 1)); 4/8字节在32/64位平台下


&a是数组的地址,&a+1是数组的地址+1,虽然相当于跳过了整个数组,但还是一个地址,所以大小还是4/8


printf("%d\n", sizeof(&a[0])); 4/8字节在32/64位平台下

第1个元素地址,地址大小为4/8字节在32/64位平台下


printf("%d\n", sizeof(&a[0] + 1)); 4/8字节在32/64位平台下


第一个元素地址+1,就是第二个元素地址,地址大小为4/8字节在32/64位平台下

————————————————

版权声明:本文为CSDN博主「敲代码的布莱恩特」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/DerrickWestbrook/article/details/120114553

相关文章
|
5天前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
8 0
|
6天前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
7天前
|
C语言
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
|
8天前
|
编译器 C语言
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
10 0
|
12天前
|
程序员 C语言
C语言memcpy()函数用法
C语言memcpy()函数用法
|
12天前
|
C语言
C语言strcpy函数用法
C语言strcpy函数用法
|
26天前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
19 2
|
26天前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
15 1
|
27天前
|
C语言
C语言——oj刷题——模拟实现库函数strlen
C语言——oj刷题——模拟实现库函数strlen
11 0
|
29天前
|
C语言
C 语言关于sizeof() 和 strlen()区别?
C 语言关于sizeof() 和 strlen()区别?
13 2