【C语言经典面试题】这样的char * 定义怎么回事

news2024/11/20 18:25:51

作者简介

*架构师李肯(全网同名)**,一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流IoT云平台的对接、嵌入式IoT系统的架构设计等等。拥有多项IoT领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得RT-Thread官方技术社区原创技术博文优秀奖,荣获CSDN博客专家、CSDN物联网领域优质创作者、2021年度CSDN&RT-Thread技术社区之星、2022年RT-Thread全球技术大会讲师、RT-Thread官方嵌入式开源社区认证专家、RT-Thread 2021年度论坛之星TOP4、华为云云享专家(嵌入式物联网架构设计师)等荣誉。坚信【知识改变命运,技术改变世界】!


【C语言经典面试题】这样的char * 定义怎么回事

代码写得多了,都有点怀疑人生了,看到这样的变量定义,竟然忍不住怀疑起来!

文章目录

  • 1 写在前面
  • 2 问题描述
  • 3 问题解释
  • 4 简单验证

1 写在前面

C语言作为嵌入式的入门编程语言,毋庸置疑,学会了它,可以让你在嵌入式软件编程中得心应手。但是,如果你的基础不牢,往往会面对一些代码时,甚至会怀疑人生,比如下面的这段很段很简单的代码,你是否能够准确掌握呢?

可以试试看吧。

2 问题描述

有这么一段代码:

char *p1,p2,p3;

请分别说出p1、p2、p3分别属于什么类型?

这个问题的来源是我自己疑惑出来的。

有一天,我看到我自己的写的这段代码,自我怀疑了一下,咦,这几个变量到底是什么类型啊?

3 问题解释

其实上面的问题是一个很基础的C语言知识,但是应该你太久没有接触这些基础的知识,天天在写一些业务代码,往往容易忽略这些基础的东西。

我们首先来看一下:

p1 变量,毫无疑问,它肯定是 char * 指针,即指向char类型的指针变量;

而p2 变量呢,它到底是char * 类型还是 char 类型呢?

p3变量的情况与p2类型,我们暂且只分析p2 变量。

根据 指针定义符号 * 的 右结合性 ,它首先是跟 p1 结合在一起,组合成一个指针变量;

而到了p2变量这,没有 * 号与之结合,自然它的类型应该是 char类型, 而不是char *类型。

4 简单验证

为了验证这个观点,我特意写了一段代码做验证:

#include <stdio.h>


int main(void)
{
	char c;
	char *array;
	char *p1, p2, p3;
	char *p4, *p5, *p6;

	printf("sizeof(array) = %d\n", sizeof(array));
	printf("sizeof(c) = %d\n", sizeof(c));
	printf("sizeof(p1) = %d\n", sizeof(p1));
	printf("sizeof(p2) = %d\n", sizeof(p2));
	printf("sizeof(p3) = %d\n", sizeof(p3));
	printf("sizeof(p4) = %d\n", sizeof(p4));
	printf("sizeof(p5) = %d\n", sizeof(p5));
	printf("sizeof(p6) = %d\n", sizeof(p6));

	return 0;
}

通过运行这段测试代码,可知:

image-20221205010226311

正如我们分析的那样,p1是指针类型,而p2和p3都是char类型;而类似定义中,p4/p5/p6都是指针类型。

这里,我们是利用了sizeof的特性:它对普通变量求值,得出的是该类型占内存的大小;而对任意指针变量求值,得出的都是指针类型在该平台下所占内存的大小,即为机器的字长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cookie | Cookie的理论基础、Cookie中常用的方法

目录 一&#xff1a;Cookie的理论基础 二&#xff1a;Cookie中常用的方法 一&#xff1a;Cookie的理论基础 &#xff08;1&#xff09;cookie怎么生成&#xff1f; ①session的实现原理中&#xff0c;每一个session对象都会关联一个sessionid&#xff0c;例如&#xff1a;JS…

中创软件递交上会稿:年营收不到2亿 税收优惠占利润比高

雷递网 雷建平 12月10日山东中创软件商用中间件股份有限公司&#xff08;简称&#xff1a;“中创软件”&#xff09;日前递交上会稿&#xff0c;准备在科创板上市。中创软件计划募资6亿元&#xff0c;其中&#xff0c;2.3亿元用于应用基础设施及中间件研发项目&#xff0c;1.3亿…

开源一个各种USB电缆的测试仪,再也不用担心被只有充电功能的数据线坑了

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;01 想知道你的USB Type C数据线是USB2或者USB3吗&#xff1f;大家是否有一些仅有充电功能的USB数据线在你的抽屉里&#xff0c;等待某个…

量子计算(十三):量子计算的if和while

文章目录 量子计算的if和while 一、基于测量的跳转 二、基于量子信息的IF和WHILE 量子计算的if和while 所谓量子线路&#xff0c;从本质上是一个量子逻辑门的执行序列&#xff0c;它是从左至右依次执行的。即使介绍了函数调用的思想&#xff0c;也可以理解为这是一种简单地…

10-11-12 - 实模式到保护模式

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 从计算机的历史谈起2. 绝对的权利带来的问题3. CPU历史的里程碑 - 80863.1 深入解析 [段地址 : 偏移地址]3.1.1 示例3.1.2 问题3.2 8086时期应用程序中的问题3.3 思考4. 80286的登场4.1 80286的兼容性4.2 初识保护模式4.2.1 描述…

JDBC连接数据库详解~

课前导读&#xff1a; 本文章有关JDBC连接数据库的操作&#xff0c;其中涉及了编译器idea的使用&#xff0c;其中连接的数据库为MySQL数据库&#xff0c;通过博主自己的学习和总结写出了下面的文章。 目录 课前导读&#xff1a; 一、JDBC简介 二、JDBC连接操作 三、源码提供…

数素数

目录 1013 数素数 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码长度限制: 时间限制: 内存限制: 思路: 1.判断素数 1.2素数判断代码: 2.数组存素数 2.2存素数代码: 3.输出Pm到Pn的全部素数 3.2代码 总代码: 总结: 题目…

Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 1.4.4 通用操作系统 1.4.5 单用户操作系统

非零基础自学计算机操作系统 文章目录非零基础自学计算机操作系统第1章 操作系统概述1.4 操作系统的分类1.4.3 实时操作系统1.4.4 通用操作系统1.4.5 单用户操作系统第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 所谓实时&#xff0c;是指系统能够对外部请求做…

R语言多重比较方法

假设检验的基本原理是小概率原理&#xff0c;即我们认为小概率事件在一次试验中实际上不可能发生。 多重比较的问题 当同一研究问题下进行多次假设检验时&#xff0c;不再符合小概率原理所说的“一次试验”。如果在该研究问题下只要有检验是阳性的&#xff0c;就对该问题下阳性…

c#入门-静态引用,扩展方法

静态引用 声明静态引用 引用命名空间时&#xff0c;可以在using后面加static修饰符。 然后把要引用的命名空间改为带命名空间的一个具体的类。 这称为静态引用。 using static System.Int32; using static System.Console; int a Parse(ReadLine());静态引用的效果 静态引…

VRC改模从入门到入门

第一步入门 从unity开始 bilibili超细心的unity入门教程 虽然视频很长&#xff0c;但是从p1看到p41就行&#xff0c;脚本部分完全不需要看&#xff0c;因为vrc上传会过滤掉不是他们的脚本的。 unity下载一定要下载2019.4.31f1版本&#xff0c;哔哩哔哩教程有下载unity对应版本…

基于Android的外卖App系统设计

基于Android的外卖App系统设计 摘要 随着智能手机的快速普及&#xff0c;智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务&#xff0c;一种高效的办法就是将应用系统的功能拓展到手机终端上&#xff0c;让手机能够通过移动网以及互联网…

CentOS 安装 mysql 8.0

目录 下载 安装步骤 上传 解压安装 参考资料 补充报错解决 下载 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 安装步骤 上传 使用xshell&#xff0c;连接服务器&#xff0c;用 rz命令接收下载的文件&#xff08;该命令使用 yum…

Linux 文件属性

Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命…

LeetCode Hot 100~Day1

目录 两数之和 两数相加 无重复字符的最长子串 最长回文子串 盛最多水的容器 删除链表的倒数第n个节点 合并两个有序链表 有效的括号 两数之和 题目链接&#xff1a;1.两数之和 示例 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[0,1] 解释…

ADI Blackfin DSP处理器-BF533的开发详解33:数字信号处理详解-FFT(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 FFT&#xff08;Fast Fourier Transformation&#xff09;&#xff0c;即为快速傅氏变换&#xff0c;是离散傅氏变换的快速算法&#x…

web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

介绍 本文并不表示R在数据分析方面比Python更好或更快速&#xff0c;我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。 本文中的 数据 每天都会更新&#xff0c;我的文件版本更大&#xff0c;为4.63 GB。 CSV文件包含纽约市的311条投诉。它是纽约市开放…

MySQL 数据库 C/C++ 常用函数

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…