c语言
文章平均质量分 55
水枂
这个作者很懒,什么都没留下…
展开
-
32位和64位机器上C语言数据类型的大小
作为嵌入式开发的人员,是必须了解C语言在不同位数机器上占用的字节大小的,下面做下对比不同位数平台对比:\16位平台32位平台64位平台char1个字节8位1个字节8位1个字节short2个字节16位2个字节16位2个字节int2个字节16位4个字节32位 4个字节long4个字节32位4个字节32位 8个字节 long long8个字节8个字节8个字节指针2个字节4个字节8个字节思维导图如下:本文章.原创 2020-07-03 21:33:25 · 1322 阅读 · 0 评论 -
指针强制类型转换触发内存自动对齐
C语言的指针是我们操作很灵活,但是也留下了不少坑,今天工作遇到了一个指针的坑,这里复现一下: 指针类型强制转换,并进行解引用,引起的内存对齐问题.(一)问题复现:运行环境:Ubuntu 16.04#include <stdio.h>int main(void){ char cTestBuffer[10] = {0,1,2,3,4,5,6,7,8,9}; char *pcData = &cTestBuffer[5]; int iDest =0;原创 2021-04-26 22:44:11 · 693 阅读 · 1 评论 -
*++p和*p++的区别
首先你应该明白* 和 ++的优先级是相同的,而且他们的结合性是从又往左的#include <stdio.h>int main(int argc ,char * argv[]){ int str[]={1,2,3,4,5,6,7,8,9,10}; int *p = str; int a = *p++;//a=*p ,p=p+1即a=1,p=&str[1] int b = *++p;//p=p+1,b=*p即p=&原创 2020-11-13 22:48:25 · 1127 阅读 · 0 评论 -
gcc: weak_alias如何使用
本文主要说明weak和alias是什么和如何使用它__attribute__是gcc专有的,用来说明函数的属性,weak和alias分别是两个属性。强符号和弱符号:强符号:已经初始化的全局变量和未被weak修饰的函数弱符号:未初始化的全局变量和被weak修饰的函数符号链接原理:链接器发现同时存在弱符号和强符号,优先选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号上面这个有什么用呢?比如我们想使用某个函数必须用到的函数,但是不知道该函数在其他地方有没有被定义,那么我们可以把该函数声.原创 2020-11-01 14:56:03 · 2406 阅读 · 0 评论 -
大小端问题傻傻分不清?
先来熟悉一下概念:大端:数据的高位数据保存在低位地址,数据的低位数据保存在高地址小端:数据的高位数据保存在高位地址,数据的低位数据保存在低地址为什么会存在大小端的问题? 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在 c语言中还有short、long大于一个字节的数据类型。例如16位或者32位的处理器,由于寄存器宽度大于一个字节 ,那么必然存在着一个如何将多个字节安排的问题。我们常见的X86架构的计算机是小端模式,ARM架构可以根据原创 2020-09-04 21:23:58 · 138 阅读 · 0 评论 -
你的main函数规范吗?
在学习c语言的时候,有一个函数一直被我们使用,那就是main函数,但是你知道标准里面是怎么规定它的写法吗?平时看见的main函数有下面这几种:1.int main(void){ }2.int main(){ }3.int main(int argc, char *argv[]){ }4.main(){ }5.void main(){ }上面的这么多种写法,哪种是正确的呢?其实这是历史问题,和编译器有关,C89、C99标准的写法为int main(void) { }原创 2020-05-17 09:44:50 · 253 阅读 · 0 评论 -
(八)C语言之结构
今天来说一下C语言里的结构体(struct)、共用体(l联合体)union、枚举。(一)结构体:struct1.1 概念是一种自定义的数据类型结构体是构造类型的一种不同数据类型的集合地址空间连续,每次分配最大数据类型的宽度占用内存为所有变量的总大小(注意字节对齐问题)1.2 定义1.先定义结构体类型,再说明结构体变量struct stu{ char *name...原创 2020-03-07 09:43:48 · 377 阅读 · 0 评论 -
(七)C语言之指针
c语言相比其他高级语言来说,更接近于对计算机硬件的操作,而指针的应用更是为我们对硬件的操作插上了翅膀,所以指针是嵌入式编程不可少的一部分,在一定意义上说,指针是c语言的精髓。一、 什么是指针在计算机中,数据时存放在内存中的,而内存其实就是一组有序字节组成的数组,一般以一个字节为一个内存单元,每个字节都有唯一的地址。cpu通过寻址的方式去查找内存中某个变量的位置,我们知道定义变量就是向CPU...原创 2020-03-07 09:43:00 · 270 阅读 · 0 评论 -
(六)C语言之函数
本篇文章分为三个部分讲解,分别为函数、局部变量和全局变量、c语言存储分区(一)函数的定义和调用函数:工程中最小的单位,为了实现某一功能的 函数的定义:数据类型 函数名(数据类型 形参1,数据类型 形参2....) { 函数体;//实现函数的功能 } 数据类型:可以是基本数据类型也可以是构造数据类型,空类型或指针类型1、函数名前的数据类型该类型是函数返回值类型...原创 2020-03-07 09:40:08 · 782 阅读 · 0 评论 -
(五)C语言之二维数组
今天的第二个内容单独拿出来讲一下,对于初接触C语言的人来说,这个知识点比较难懂,后面在讲指针的时候我还会提到这部分的内容,看不懂的同学可以看后面的内容。指针变量可以指向一维数组中的元素,当然也就可以指向二维数组中的元素。但是在概念和使用方法上,二维数组的指针比一维数组的指针要复杂一些。要理解指针和二维数组的关系首先要记住一句话:二维数组就是一维数组,这句话该怎么理解呢?假如有一个二维数组:...原创 2020-03-07 09:38:57 · 2731 阅读 · 1 评论 -
C语言练习(一)
今天来讲解一下数组相关的习题,巩固昨天的知识欢迎加入嵌入式学习群:5596011871.对于二维数组首地址偏移。二维数组数组名偏移一个数,地址偏移一行,针对这个问题后面会做一个详细的讲解#include <stdio.h>int main(){ int str[3][3]={1,2,3,4,5,6,7,8,9}; int i=0,j=0; for(i=0;i...原创 2020-03-06 14:14:57 · 1334 阅读 · 0 评论 -
(四)C语言之数组
讲一下数组的相关知识,数组在以后的编程还是很重要的,希望大家认真学习,同时也勉励自己。欢迎加入嵌入式学习群:559601187在C语言中使用数组必须先进行定义,数组属于构造数据类型的一种,它是一组相同数据类型的集合,数组的每个元素都是该类型的空间。(一)维数组**数组的定义:**数据类型 数组名[元素个数]其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识...原创 2020-03-06 14:13:48 · 1240 阅读 · 0 评论 -
C语言之getchar()用法
(1)语法int getchar(void);(2)返回值getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。...原创 2020-03-06 12:19:45 · 28837 阅读 · 0 评论 -
(三)C语言之九条语句
今天来说一下我们以后可能用的最多的C语言语句:条件语句、循环语句、控制语句。理论很简单,注重多自己写代码才能熟练运用。欢迎加入嵌入式学习群:559601187 一起愉快的玩耍啊~###(一)条件语句####(1)if语句第一种形式:if(表达式){ 语句;//实现的程序}//如果表达式1为真就执行if中的语句,否则不执行第二种形式://if如果不加大括号,只包...原创 2020-03-06 12:13:07 · 1999 阅读 · 0 评论 -
(二)C语言数据类型(2)
今天主要总结了一下运算符,详细介绍了运算符分类和优先级的基本知识欢迎加入嵌入式学习群:559601187运算符按操作数可以分为:单目运算符、双目运算符和三目运算符,优先级依次为单目运算符>双目运算符>三目运算符,在c语言里三目运算符只有一个,例如:a>b?a:b;表示如果a>b则执行a否则执行b图一列出了常见的运算符,下面对上面的内容进行一些补充:(1)按位与...原创 2020-03-06 12:10:56 · 268 阅读 · 0 评论 -
(一)C语言之数据类型
在这里主要讲了基本的知识,具体练习时注意用代码看看数据存储的位数和大小,像char a=127;a=a+1;这时候a的值。可以用sizeof查看数据类型占的字节数。以及不同数据类型之间如何自动转换和强制转换,还有printf和scanf的具体用法,多动手练习一些容易模糊的东西,自己用代码去尝试。(一)c语言数据类型这个是我总结的一些基础类型知识,通过上图可以看到c语言的基本数据类型是字符...原创 2020-03-06 12:07:12 · 2175 阅读 · 0 评论 -
C语言入坑指南-数组之谜
今天就不讲新知识了,记得复习前面的内容哦,在微信上看到一篇文章挺好的,直接转了过来,和大家分享一下原文链接:嵌入式Linux前言在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。数组回顾在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们说明,假设有以下数组声明:int ...原创 2019-10-10 22:32:08 · 127 阅读 · 0 评论 -
C语言写个贪吃蛇游戏
在windows下编译运行后,会有点bug,也不能说bug利用命令行的刷新使得此程序会出现闪屏的现象。贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的。我试了说一下这个代码 核心的三个函数menu(); setup(); draw(...转载 2020-02-22 17:42:07 · 244 阅读 · 0 评论 -
C/C++程序员的编程修养
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。我认为好的程序员应该有以下几方面的素质:1、有专研精神,勤学善问、举一反三。2、积极向上的态度,有创造性思维。3、与人积极交流沟通的能力,有团队精神。4、谦虚谨慎,戒骄戒燥。5...转载 2020-02-21 16:29:04 · 218 阅读 · 0 评论 -
C语言实现音乐播放器(Linux madplay)
(一)需求分析1.扫描指定路径下的音乐,并显示出来2.实现音乐的播放、暂停、上一首和下一首的功能3.程序退出释放内存资源(二)思路1.扫描出指定路径下的音乐文件(便利指定文件夹,找出音频文件放在数组里面)2.创建链表存放音乐的信息(音乐名、歌曲路径、歌曲总数等信息)3.创建新的进程,用来播放音乐4.调用kill函数实现音乐的切换和暂停播放功能注意: 如果出现设备繁忙,可以使用ps...原创 2020-02-09 10:02:38 · 10024 阅读 · 11 评论