首页 > 其他分享 >C语言深入理解指针六(19)

C语言深入理解指针六(19)

时间:2024-09-12 14:53:04浏览次数:3  
标签:题目 19 C语言 数组 sizeof 如下 strlen 指针

文章目录


前言

  本篇都将是练习题,从而让你对指针的理解更上一层楼


一、sizeof & strlen

sizeof

 在学习操作符的时候,我们学习了sizeof、sizeof计算变量所占内存空间大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小

sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据
在这里插入图片描述

strlen

 strlen是C语言函数,功能是求字符串长度,函数原型如下:

size_t strlen (const char* str);

 统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数
 strlen函数会一直向后找\0字符,直到找到为止,所以可能存在越界查找
在这里插入图片描述

sizeof和strlen的对比

在这里插入图片描述

二、数组和指针笔试题解析

一维数组

在这里插入图片描述

你能说出它们的输出吗?

结果如下:
在这里插入图片描述

字符数组

在这里插入图片描述

请你继续说出它们的输出~

结果如下:
在这里插入图片描述

那接下来的这个呢,它们的输出又如何?
在这里插入图片描述
结果如下:
在这里插入图片描述

再看看这个:
在这里插入图片描述
结果如下:
在这里插入图片描述

继续:
在这里插入图片描述
结果如下:
在这里插入图片描述

再看看:
在这里插入图片描述
结果如下:
在这里插入图片描述

再看!:
在这里插入图片描述
结果如下:
在这里插入图片描述

二维数组

哈哈,还没结束呢!
请看:
在这里插入图片描述
结果如下:
在这里插入图片描述

三、指针运算笔试题解析

题目1

在这里插入图片描述
答案是 2 ,5,图片如下:

在这里插入图片描述

题目2

在这里插入图片描述
本题很有意思,把一个0x100000强制转换成地址赋值给p,然后再进行运算
本题其实考察的是指针 + 整数的意思

很显然:
第一个打印中,p被强制转换成无符号长整数,那也是整数,所以,第一个就是输出0x100001;
第二个打印中,p被强制转换成无符号整数指针,指针 + 1,就是跳过类型长度的字节数,所以输出0x100004

题目3

在这里插入图片描述
本题还是比较阴险的,注意大括号里面的是圆括号,这时候就要联想到逗号表达式

我们先来看看调试:
在这里插入图片描述
原来,我们像(0, 1)这样的式子,逗号表达式取后面的1,拿来给a初始化了,还是蛮有意思的

题目4

在这里插入图片描述

画图很重要,请认真画图!

 首先a的地址赋给p,无视警告,p指向的是四个元素的整型数组
 p先跳四次四格的int,再跳两次一个的,跳到如图的红色位置,这就是p[4][2],绿色部分就是a[4][2]
在这里插入图片描述

此时,我们还要想指针-指针得出来的是一个整数,而%p打印的是地址,把-4当成地址,也就是把内存中-4的补码以0x…形式打印出来
所以%p打印FFFFFFFC,%d打印原码-4

题目5

在这里插入图片描述
还是要常画图:
在这里插入图片描述
答案是 10,5

题目6

在这里插入图片描述在这里插入图片描述
这样就很显然了,答案是打印at

题目7

在这里插入图片描述
 初看下标-1,一开始可能会感到有些奇怪,其实之前也说过,下标访问符[ ]没那么神秘,arr[i]也就是*(arr + i)而已

 接着开始画图:
在这里插入图片描述
答案如下;
在这里插入图片描述
结束~


总结

  指针的教学到这里就结束了,但是指针的运用会贯穿我们之后整个的学习路程,大家要好好掌握!

标签:题目,19,C语言,数组,sizeof,如下,strlen,指针
From: https://blog.csdn.net/2301_80392199/article/details/142172570

相关文章

  • C语言进阶【3】---C语言内存函数
    本章概述本章函数概述memcpy使用和模拟memmove使用和模拟memset函数的使用memcmp函数的使用彩蛋时刻!!!本章函数概述我们在本章的博客中讲的内容是有关内存的操作,我们直接通过内存块对数据进行操作。因为我们是直接对内存块操作,所以可以对任意类型数据进行操作(我们没......
  • 【每日刷题】Day119
    【每日刷题】Day119......
  • 【C语言基础】数据类型、运算符和表达式
    1数据类型基本类型整型:短整型,基本整型,长整型字符型实型(浮点型):单精度型,双精度型枚举类型构造类型:是使用基本类型的数据或者使用已经构造好的数据类型,进行添加、设计构造出新的数据类型,使其设计的新构造类型满足待解决问题所需要的数据类型。数组类型结构体类型共用体类......
  • C++ 指针
    声明int*ipl,*ip2;//ipl和ip2都是指向int型对象的指针doubledp,*dp2;//dp2是指向double型对象的指针,dp是double型对象因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。指针值指针的值(即地址)应属下列4种状态之一:指向一个对象。指向紧邻对象所占空......
  • C语言15--联合体与枚举
    联合体(共同体)基本概念        联合体的外在形式跟结构体非常类似,但它们有一个本质的区别:结构体中的各个成员是各自独立的内存空间,而联合体中的各个成员却共用同一块内存,因此联合体也称为共用体。联合体各成员的堆叠效果联合体内部成员的这种特殊的“堆叠”效果,使......
  • 【Linux 19】线程概念
    文章目录......
  • Oracle 19c OCP 认证考试 082 题库(第20题)- 2024年修正版
    【优技教育】Oracle19cOCP082题库(Q20题)-2024年修正版考试科目:1Z0-082考试题量:90通过分数:60%考试时间:150min本文为(CUUG原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。原文地址:http://www.cuug.com/index.php?s=/home/article/detail/id/3401.html第......
  • springboot一个ACG主题网站-计算机毕业设计源码94119
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2网站分析2.1可行性分析2.2网站流程分析2.2.1网站开发流程2.2.2用户登录流程2.2.3网站操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 网站......
  • 洛谷题单指南-分治与倍增-P1966 [NOIP2013 提高组] 火柴排队
    原题链接:https://www.luogu.com.cn/problem/P1966题意解读:计算两个序列∑(ai​−bi​)^2的最小值,对10^8-3取模。解题思路:1、贪心思路要使得两个序列对应位置元素之差的平方和最小,必须满足两个序列相对排序是一致的,什么意思?设a序列有两个元素:a1,a2,b序列有两个元素b1,b2当a1<a2,b......
  • 【C语言加油站】你真的知道什么是文件吗?今天咱们就来好好认识一下文件
    文件操作导读一、什么是文件?1.1日常生活中的文件1.2计算机中的文件1.3文件的分类1.4文件的名字二、为什么要有文件三、如何使用文件?结语导读大家好,很高兴又和大家见面啦!!!在今天的内容中,我们就会介绍C语言中的文件操作。在开始今天的内容之前,我先问一下大家,你......