C语言sizeof和strlen的指针和数组面试题详解

C语言sizeof和strlen的指针和数组面试题详解

目录

一、概念         

sizeof:

strlen:

二、例题及解析

2.1 一维数组

2.2 字符数组

2.3 二维数组

三、总结

一、概念          sizeof:

sizeof操作符的结果类型为size_t,(它在头文件用typedfe定义为unsigned int类型),计算的是分配空间的实际字节数。sizeof是运算符,可以以类型、函数、做参数 。

strlen:

strlen结果类型也为size_t(size_t strlen( const char *string )),但strlen是计算的空间中字符的个数(不包括‘\0’)。strlen是函数,只能以char*(字符串)做参数。而且,要想得到的结果正确必须包含 ‘\0’(通过strlen的实现得知)。

二、例题及解析

首先我们需要知道数组名的意义:

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

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

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

2.1 一维数组 int a[] = { 1,2,3,4 }; printf("%d\n", sizeof(a)); //16 a是整个数组的大小,sizeof计算出结果为16字节 printf("%d\n", sizeof(a+0)); //4 a是首元素的地址 printf("%d\n", sizeof(*a)); //4 首元素地址的解引用 printf("%d\n", sizeof(a+1)); //4 2的地址 printf("%d\n", sizeof(a[1])); //4 printf("%d\n", sizeof(&a)); //4 &a数组的地址,4个字节 printf("%d\n", sizeof(*&a)); //16 *和&抵消 printf("%d\n", sizeof(&a+1)); //4 4个字节的地址,跳过了4 printf("%d\n", sizeof(&a[0])); //4 printf("%d\n", sizeof(&a[0]+1)); //4 //总结: 只要是地址,不论什么类型,大小都为4个字节 2.2 字符数组 char arr[] = { 'a','b','c','d','e','f' }; printf("%d\n", sizeof(arr));//6 printf("%d\n", sizeof(arr+0));//4 首元素地址为4个字节 printf("%d\n", sizeof(*arr));//1 printf("%d\n", sizeof(arr[1]));//1 printf("%d\n", sizeof(&arr));//4 printf("%d\n", sizeof(&arr+1));//4 printf("%d\n", sizeof(&arr[0]+1));//4 printf("%d\n", strlen(arr));//随机值 strlen要找到\0才能返回数据的长度 printf("%d\n", strlen(arr+0));//随机值 printf("%d\n", strlen(*arr));//err strlen(a)会把a的ASCII码值97当作地址往后找 printf("%d\n", strlen(arr[1]));//err printf("%d\n", strlen(&arr));//随机值 printf("%d\n", strlen(&arr+1));//随机值 printf("%d\n", strlen(&arr[0]+1));//随机值 char arr[] = "abcdef"; printf("%d\n", sizeof(arr));//7 arr是数组的地址 printf("%d\n", sizeof(arr + 0));//4 arr是首元素的地址 printf("%d\n", sizeof(*arr));//1 printf("%d\n", sizeof(arr[1]));//1 printf("%d\n", sizeof(&arr));//4 数组的地址 4个字节 printf("%d\n", sizeof(&arr + 1));//4 printf("%d\n", sizeof(&arr[0] + 1));//4 printf("%d\n", strlen(arr));//6 printf("%d\n", strlen(arr + 0));//6 printf("%d\n", strlen(*arr));//err printf("%d\n", strlen(arr[1]));//err printf("%d\n", strlen(&arr));//6 printf("%d\n", strlen(&arr + 1));//随机值 printf("%d\n", strlen(&arr[0] + 1));//5 char *p = "abcdef"; printf("%d\n", sizeof(p));//4 p是指针变量,求指针变量的大小,为4个字节 printf("%d\n", sizeof(p + 1));//4 p+1为b的地址 printf("%d\n", sizeof(*p));//1 printf("%d\n", sizeof(p[0]));//1 printf("%d\n", sizeof(&p));;//4 指针p的地址 printf("%d\n", sizeof(&p + 1));//4 printf("%d\n", sizeof(&p[0] + 1));//4 b的地址 printf("%d\n", strlen(p));//6 printf("%d\n", strlen(p + 1));//5 printf("%d\n", strlen(*p));//err strlen需要传入地址 printf("%d\n", strlen(p[0]));//err printf("%d\n", strlen(&p));//随机值 printf("%d\n", strlen(&p + 1));//随机值 printf("%d\n", strlen(&p[0] + 1));//5 从b开始数 2.3 二维数组 int a[3][4] = { 0 }; printf("%d\n", sizeof(a)); //48 二维数组中sizeof(a),a同样表示整个数组 printf("%d\n", sizeof(a[0][0])); //4 printf("%d\n", sizeof(a[0])); //16 a[0]可看作第一行的数组名,sizeof(数组名)计算第一行数组大小 printf("%d\n", sizeof(a[0] + 1)); //4 a[0]表示第一行首元素地址,即a[0][0]地址,再+1为a[0][1]地址 printf("%d\n", sizeof(*(a[0] + 1))); //4 printf("%d\n", sizeof(a + 1)); //4 a为第一行一维数组的地址,+1为第二行的地址 printf("%d\n", sizeof(*(a + 1))); //16 第二行地址的解引用,是数组指针的解引用,访问的是一个数组的大小 printf("%d\n", sizeof(&a[0] + 1)); //4 第一行地址+1,得第二行地址 printf("%d\n", sizeof(*(&a[0] + 1))); //16 第二行的大小 printf("%d\n", sizeof(*a)); //16 第一行地址解引用是第一行的大小 printf("%d\n", sizeof(a[3])); //16 计算第四行的大小(即使没有第四行) 三、总结

这些都是来自往年的笔试题,非常重要!!!学废了吗?!

建议收藏反复阅读思考,加深对指针、数组和内存的理解!!!

到此这篇关于C语言sizeof和strlen的指针和数组面试题详解的文章就介绍到这了,更多相关C语言 指针和数组内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    数列求和快捷键|数组求和快捷键

    数列求和快捷键|数组求和快捷键,,数组求和快捷键1,这是文本型数组直接运算 不可能 除非单个的取出来分割后转数值型,再找相同的X[1],进行X[2

    c4d语言设置|c4d汉语设置

    c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

    电脑宣传语|电脑宣传语言

    电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你

    office语言设置|微软office语言设置

    office语言设置|微软office语言设置,,微软office语言设置一、首先点击桌面左下角“WIN键”。二、弹出选项内点击“所有程序”。三、接着点