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

news/2025/1/11 16:55:50/

作者简介

*架构师李肯(全网同名)**,一个专注于嵌入式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.ppmy.cn/news/904565.html

相关文章

监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简介

本文介绍如何在应用程序中利用 P6Spy、SQL Profiler、IronTrack SQL 工具来对数据库操作进行监控与剖析&#xff0c;从中发现应用系统存在的性能瓶颈&#xff0c;得到相关的优化建议并最终找到相应的解决办法。 几乎 80% - 85% 的数据库性能问题是由于应用数据库的设计或者应用…

英语测试论坛

http://bdonline.sqe.com/ 一个关于网站测试方面的网页,对这方面感兴趣的人可以参考- ^1 {; c& ?- \http://citeseer.nj.nec.com/ 一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站" ?# ^% Q/ b: p) Q% X5 r& t…

转用P6SPY查看HIBERNATE生成的SQL

SHOW_SQL获得HIBERNATE生成的SQL中&#xff0c;update/insert语句中的value被替换成“&#xff1f;”&#xff0c;昨天得本论坛高人指点用p6spy解决了此问题&#xff0c;特将解决之道回馈本论坛&#xff0c;以答谢Quake Wang。 开发环境&#xff1a;tomcat 4.1.24 oracle 9i 注…

微信小程序/校园社区论坛/微信云开发/云函数

# 一、框架来源 1.非常非常感谢B站up主“[梦千的曾哥哥](https://space.bilibili.com/404417254)”的开源框架。 没有他就没有这个小程序。如果有想做的同学&#xff0c;可以直接移步他的视频那里开始学习。我水平不够&#xff0c;就不教具体怎么配置环境&#xff0c;创建项目之…

意外被裁,逆境中意外面过阿里3+1,成功拿下阿里Java岗P6 offer

众所周知,互联网行业是一个说变就变的行业,随着互联网的飞速发展,涌现了一大批新兴互联网行业,在这个行业里,巨头企业也在不停地更换中。而对于程序员来说,可能一不小心就要面临裁员的危机,毕竟在这个行业里,人才太多,而在互联网寒冬的今年,我也不幸被裁员,加入到了…

Java--汽车之家论坛反爬虫破解

问口碑的人比较多&#xff0c;写了一下思路&#xff0c;请点击这里 现在论坛的反爬虫也改成了字体映射,所以本篇破解方式已经不适用了,新的破解方式可以看我的口碑破解方法. ---2018-1-9 目前论坛可以用 , 口碑的不能用 . 最近的口碑破解有时间分享 ---2017.11.16 公司给的任…

matlab作包络面论坛,求大神指点绘制空间内散点图的包络面,,,散点程序如下...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 E[];a0;b0;c0; for Zp-50:2:50 for Xp-200:2:200 for Yp-200:2:200 P1_1[cos(b)*cos(c) -cos(b)*sin(c) sin(b) Xp;sin(a)*sin(b)*cos(c)cos(a)*sin(c) cos(a)*cos(c)-sin(a)*sin(b)*sin(c) -sin(a)*cos(b) Yp;sin(a)*sin(c)-cos(…

华为P6-U06 ROOT

移动、联通、电信版P6均可成功的EMUI3.0开发版/稳定版 ROOT... - P6/P6s 花粉俱乐部 http://cn.club.vmall.com/forum.php?modviewthread&tid1710032&extrapage%3D4%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline 华为 Ascend P6 联通版首个真正意义的…