广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言sizeof和strlen的指针和数组面试题详解
  • 632
分享到

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

2024-04-02 19:04:59 632人浏览 泡泡鱼
摘要

目录一、概念         sizeof:strlen:二、例题及解析2.1 一维数组2.2 字符数

一、概念         

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语言 指针和数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://www.lsjlt.com/news/145685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言sizeof和strlen的指针和数组面试题详解
    目录一、概念         sizeof:strlen:二、例题及解析2.1 一维数组2.2 字符数...
    99+
    2022-11-13
  • C语言strlen和sizeof在数组中的使用详解
    目录一、前言二、sizeof在二维数组的试题解读:题解:答案验证:64位平台下:32位平台下:一、前言 前面我们详细讲了sizeof和strlen中的使用,基本涉及了所有一维数组可以...
    99+
    2022-11-12
  • C语言中指针和数组试题详解分析
    目录数组题:程序一(一维数组):字符数组程序二(字符数组):程序三(字符数组):程序四(字符数组):程序五(字符数组):二维数组程序六( 二维数组):指针题程序七( 指针):程序八(...
    99+
    2022-11-12
  • c语言的指针数组详解
    指针如何指向数组,并读取数组中的元素: #include <stdio.h> int main() { int arr[3] = {1,2,3}; int *p;...
    99+
    2022-11-12
  • C语言的数组指针与函数指针详解
    目录前言函数指针语法数组指针与指针数组总结前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通...
    99+
    2022-11-13
  • C语言指针数组和数组指针的区别有哪些
    这篇“C语言指针数组和数组指针的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针数组和数组指针的区别有哪些...
    99+
    2023-07-04
  • 【C进阶】指针和数组笔试题解析
    做题之前我们先来回顾一下 对于数组名的理解:除了以下两种情况,数组名表示的都是数组首元素的地址 (1)sizeof(数组名):这里的数组名表示整个数组 (2)&(数组名) :这里的数组名也表示整个数组 一、一维数组 int a[]...
    99+
    2023-09-26
    c语言 算法 开发语言
  • C语言零基础讲解指针和数组
    目录一、指针和数组分析-上1.数组的本质2.指针的运算3.指针的比较4.小结二、指针与数组分析-下 1.数组的访问方式2.下标形式 VS 指针形式3.a 和 &a ...
    99+
    2022-11-13
  • C语言深入分析数组指针和指针数组的应用
    目录一、数组类型二、定义数据类型三、数组指针四、指针数组五、小结一、数组类型 C语言中的数组有自己特定的类型数组的类型由元素类型和数组大小共同决定 例:int array[5] 的类...
    99+
    2022-11-13
  • C语言利用面试真题理解指针的使用
    目录前言笔试题一笔试题二笔试题三笔试题四笔试题五笔试题六笔试题七笔试题八前言 大家好~我又来了,今天给大家带来的是指针的几道笔试题,希望能够加强大家对指针知识的把握,指针就应该这样学...
    99+
    2022-11-13
    C语言 指针 C语言 面试 指针
  • C语言详细讲解指针数组的用法
    目录1. 指针数组定义方法2. 指针的指针(二级指针)3. 字符串和指针4. 数组指针定义方法数组指针的用法1. 指针数组定义方法 格式: 类型说明符 *数组名[ 元素个数 ] in...
    99+
    2022-11-13
  • 详解C++数组和数组名问题(指针、解引用)
    目录一、指针 1.1 指针变量和普通变量的区别1.2 为什么需要指针1.3 指针使用三部曲二、整形、浮点型数组2.1 数组名其实是特殊的指针2.2 理解复杂的数组的声明2....
    99+
    2022-11-12
  • C语言中的数组和指针有什么作用
    本文小编为大家详细介绍“C语言中的数组和指针有什么作用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中的数组和指针有什么作用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。指针相信大家对下面的代码不陌生:i...
    99+
    2023-06-16
  • C语言数组和指针,内存之间的关系
    首先论证一维数组和一级指针之前的关系,我们常常使用一级指针指针的方式访问一维数组,只有对内存的理解到位才能理解它们直接的关系。 1.数组名是数组的首地址2.对数组名取地址得到的还是数...
    99+
    2022-11-13
  • C语言中数组和指针的作用是什么
    这篇文章将为大家详细讲解有关C语言中数组和指针的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。指针相信大家对下面的代码不陌生:int i=2;  &n...
    99+
    2023-06-17
  • 掌握指针和数组:经典笔试题攻略(万字详解)
    💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库​&#x...
    99+
    2023-09-18
    c语言 开发语言 学习 经验分享
  • C语言中数组和指针,内存之间的关系是什么
    小编给大家分享一下C语言中数组和指针,内存之间的关系是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先论证一维数组和一级指针之前的关系,我们常常使用一级指针...
    99+
    2023-06-29
  • C语言指针、地址和数组函数堆空间的关系是什么
    这篇“C语言指针、地址和数组函数堆空间的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针、地址和数组函数堆...
    99+
    2023-06-30
  • C语言全方位讲解指针与地址和数组函数堆空间的关系
    目录一、一种特殊的变量-指针二、深入理解指针与地址三、指针与数组(上)四、指针与数组(下)五、指针与函数六、指针与堆空间七、指针专题经典问题剖析一、一种特殊的变量-指针 指针是C语言...
    99+
    2022-11-13
  • C语言字符串与字符数组面试题中最易错考点详解
    目录一、'\0'对字符串与字符数组的重要性二、strlen与sizeof有什么区别三、含转义字符求字符串长度本文介绍字符串与字符数组中最易错的3个考点。若以后遇到其他...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作