
编程基础
编程基础
ReCclay
优快云认证博客专家、优快云万粉博主、优快云嵌入式领域优质创作者、优快云-2020博客之星年度总评选Top25。自入站以来,凭借坚持与热爱,以博文的方式分享所学,累计博文数量达1千余篇,受益人次达300w+次,涉及领域包括但不限于前/后端软件开发、嵌入式软件开发、Linux驱动开发、自动驾驶算法研究、视觉SLAM算法研究、ROS机器人开发、FPGA开发、IC设计与验证等。欢迎您的关注,我们一起进步!
展开
-
嵌入式C语言中用到的字符数组和字符指针再次总结
之前学习C语言的时候也有单独研究记录过字符数组和字符指针,可参看:https://blog.youkuaiyun.com/ReCclay/article/details/60638929https://blog.youkuaiyun.com/ReCclay/article/details/78034368做嵌入式开发,发现在实际开发中有时完全忘记了这两者的区别,今日特地再来一番总结。笔记1当用一个char...原创 2020-01-17 11:27:19 · 676 阅读 · 0 评论 -
格式化输出十六进制的操作
#include int main( void ){ int i = 32; printf("%#04x", i);}可以说,很骚气了。。原创 2018-01-05 20:38:37 · 3138 阅读 · 0 评论 -
sprintf的深入
韶光易逝,青春难在。记得在STC15的学习中,经常见得例程中这个函数。人家也是用的6的一批,今天特此再来仔细学习下!1、连接字符串emmm,,其实我们知道strcat可以连接两个字符串,但是sprintf当然也是可以的,并且连接多个都没有问题。先来看个小例子哈,,#include int main(){ char buf[60]={0}; char *w原创 2018-01-05 20:40:51 · 1108 阅读 · 0 评论 -
大小端存储
为什么会有大小端之分呢? 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储原创 2018-01-06 09:08:42 · 1480 阅读 · 0 评论 -
static 的深入
浅尝辄止的做学问是不行的。 你糊弄技术,到头来,技术自然糊弄你。在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内转载 2018-01-06 13:31:55 · 567 阅读 · 0 评论 -
强制转换的使用技巧(keil下的C51)
//************** 强制类型转换实用技巧(地址类型转换)******************//(A)将long型变量a(值:0x12345678)的第3个字节(值:0x56)赋给char型变量b。// (B) 将数组的4个字节拼成1个long型变量// (C) 将数组的4个字节转换成2个整数// (D) 将数组的4个字节转换成1个float小数// (E) 将float型原创 2017-07-28 17:10:01 · 9120 阅读 · 1 评论 -
数据溢出与类型提升(keil下的C51)
来看这个,,#include #include unsigned long a1,a2,a3,a4,a5,a6;unsigned char b=1;unsigned char c=255;unsigned int d=65535;unsigned char e=255;void main(){ TI = 1; while(1) {原创 2017-07-29 20:27:59 · 2619 阅读 · 4 评论 -
C语言中关于结构体的内存对齐
以前没太总结,今天看飞卡的书偶然看到的一个关于嵌入式C结构体的知识,赶紧来记录下,方便以后忘记了再次查阅。1、自然对齐 两个原则: 1、各个类型偏移量必须是自身所占字节数的整数倍。 (譬如,int占4字节,它的偏移量也必须是4的倍数) 2、总的大小必须为该结构体中最大内存的整数倍,不够需要补充。对了,忘了解释这个偏移量的概念了原创 2018-01-23 21:15:51 · 551 阅读 · 0 评论 -
由枚举引起的对编译和宏预编译的理解思考
话不多说,先上一段神奇的代码!#include #include enum t{ a, b,};int main(){ printf("b = %d\n", b); #if (b==0) printf("b=0\n"); #elif (b==1) printf("b=1\n"); #endif原创 2018-01-23 22:20:43 · 2243 阅读 · 0 评论 -
戳到痛处的按位取反~ 和 逻辑取反!
竟然没有仔细想过这个问题,看这本书真的收益匪浅啊,阿弥陀佛,记录下记录下。上代码,,,#include #include int main(){ printf("~0 =0x%X, \t !0 =0x%X\n", ~0, !0); printf("~1 =0x%X, \t !1 =0x%X\n", ~1, !1原创 2018-01-23 22:49:20 · 6588 阅读 · 0 评论 -
再来一波关于数组的操作
感觉以前总结的指针和数组挺多的,emmm,,后面有时间把他们综合一下。。#include #include int main(){ int a[5] = {1,2,3,4,5}; int *p=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(p-1)); return 0;}输出2,5*(a+原创 2018-01-23 23:34:58 · 439 阅读 · 0 评论 -
指针数组和数组指针
概念指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 深入理解指针数组 首先先定义一个原创 2018-01-24 13:53:51 · 556 阅读 · 0 评论 -
C语言宏中的 # 和 ## 的骚气
记得上次见到它们是在17年暑假电赛上,当时忘了记录,而今又重新拾起,来总结下!总的来说呢, 单#号就是对它所引用的宏变量通过替换后在其左右各加上一个双引号。而##被称为连接符(concatenator),用来将两个Token连接为一个Token。先来看一个例子:#include #include #define paster(n) printf("token"#n"=原创 2018-01-23 22:03:43 · 827 阅读 · 0 评论 -
Register 的一些了解
Register修饰符暗示编译程序相应的变量将将被频繁使用 如果可能的话,应将其保存在CPU的寄存器中,以指加快其存取速度。但是,使用register修饰符有几点限制。 首先,register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小於或等於整型的长度。但是,有些机器的寄存器也能存放浮点数。 其次,因为register变量转载 2018-01-26 15:37:40 · 2387 阅读 · 0 评论 -
注释模板
/******************************************************************************** 文件名:* 描 述:* 作 者:CLAY* 版本号:v1.0.0* 日 期:* 备 注:* ****************************************************...原创 2018-02-09 23:00:05 · 396 阅读 · 0 评论 -
单片机中的C知识
1、在没有任何后缀标志的情况下,整型变量的数据类型是在能承受范围内中最短的一个!2、实际编程中,应尽可能采用 unsigned 的变量,因为计算机内存的数据存储都是补码的形式,有符号类型(特别是其中的负数)还得来回转换,导致效率不高。3、另外unsigned long的取值最大可达到42亿,这个有必要记住。4、实数型数据在内存中的存储是23位有效二进制,且有一位固定为1不存储,所以实际原创 2018-01-06 13:06:01 · 1264 阅读 · 0 评论 -
字符数组和字符指针
Ichar sa[]="Hello World!"char *sp ="Hello World!"总的来说:char sa[]="Hello World!"//sa是个数组,sa也是一个常量指针,不能改变sa的指向,”Hello World”是数组的初始化列表,可以通过下标或者间接操作来改变值char *sp ="Hello World!"//sp指向字符串常量,sp是一...原创 2017-09-19 20:41:18 · 1200 阅读 · 1 评论 -
CRC16校验的学习
CRC16,值得一看。。。原创 2017-10-07 11:28:55 · 1417 阅读 · 0 评论 -
返回字符串函数的方法总结
返回字符函数。原创 2018-01-01 16:56:59 · 4362 阅读 · 0 评论 -
C程序的内存镜像
内存的分类。。原创 2017-03-07 00:41:13 · 1268 阅读 · 0 评论 -
strlen 和 sizeof的分析比较
strlen 和 sizeof的学习比较。原创 2018-01-01 20:50:12 · 1132 阅读 · 0 评论 -
筛法求素数
level1:最原始的求素数方法 话不多说直接上代码(就是教科书上的)#include <stdio.h>#include <math.h>int IsPrime(int x);int main(){ int i,n; scanf("%d",&n); for(i=1;i<=n;i++) { if(IsPrime(i))原创 2017-02-05 13:25:48 · 547 阅读 · 0 评论 -
C++STL粗浅认识
STL的粗浅认识 为了解决链表(list)映射表(map)每次出现的啰嗦写法,更高效更简洁的写代码引入了STL。STL—的引入代表着一种编程思想的产生泛型化编程(generic programming) 同时也引入了诸多名词,比如 需求(requirements)、概念(concept)、模型(model)、容器(container)、 算法(algorithmn) 迭代器原创 2017-03-08 14:36:43 · 504 阅读 · 0 评论 -
位运算
按位与: 用来某些位清零 获取变量中的某一位跟0 &用来清零 ;跟1 & 不变 跟1 | 用来置1 ;跟0 | 不变按位异或: 用来某些位取反 交换两个数,不借助第三个变量 a ^= b; b ^= a; a ^= b; 用来加密和加密 如果 a ^b=c;则有 b ^c = a; a ^c= b; 位移运算符原创 2017-03-05 10:55:03 · 345 阅读 · 0 评论 -
单链表的建立
#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};typedef struct node LNode, *LinkList;void CreateList(LinkList head);void PrintList(LinkList head);void Lis原创 2017-03-09 08:33:50 · 406 阅读 · 0 评论 -
字符串那点事
读入字符串cin.getline(char buf[], int bufSize)回车换行不会读入buf,到缓冲流中也会被去掉。 gets()极容易使得数组越界! 所以最好使用**char * fgets(char * s, int n,FILE *stream);**规定了最多读入n-1个字符,不论前面是什么,第n个字符一定会加\0。 特别地! \n也会读入fgets() 在用fget原创 2017-03-07 00:21:39 · 510 阅读 · 0 评论 -
cin.get() 和 cin.peek() 的理解
cin.get()用法1: cin.get(字符变量名)可以用来接收字符#include <iostream>using namespace std;main (){ char ch; ch=cin.get();//或者cin.get(ch); cout<<ch<<endl;}输入:jljkljkl输出:j用法2:cin.get(字符数组名,接收字符数目)用来接收原创 2017-03-07 22:45:44 · 4958 阅读 · 0 评论 -
qsort的相关总结
qsort的相关总结 void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )qsort位于 参数说明:第一个参数 代表数组的首地址,通常直接写数组名即可第二个参数 是要排序的数组个数第三个参数 是每个元素的大小 通常sizeof(s[0])第四个参数 是自定义比较函数 (实现升序降序)需要原创 2017-03-14 00:20:52 · 629 阅读 · 0 评论 -
有趣的宏定义
我不得不讲,宏是真的666! 你以为你学会C语言了?不信你来瞧瞧下面这玩意!!! (PS:纯属巧合,在PCA的学习中偶然发现的硬件代码,我简直无FUCK可说,刚一开始,我还曾坚信楼主的傻逼,直到现在才知道自己的low)话不多说,这就开始: 1.有关在宏中进行do{……}while(0); do while 的结构 意味着程序肯定会执行,while(0)意味着肯定会只执行一次。 有关缘由,其原创 2017-07-13 00:19:34 · 588 阅读 · 0 评论 -
条件编译
何谓条件编译? 条件编译又叫预处理程序,包括宏,都是在程序编译前做的一些必要的处理,这些都不是程序的实际功能代码,而仅仅是告诉编译器需要进行的特定操作一般一个.c对应一个.h file.h主要包含: 1.”file.c”中所要使用的一些宏 2.”file.c”中自定义类型的声明 3.”file.c”中定义的全局变量进行extern声明,提供给其他.c使用(必须加exter原创 2017-07-20 02:15:44 · 523 阅读 · 0 评论 -
运算符++的前缀、后缀和&的记录
++和&原创 2017-07-22 17:43:27 · 1363 阅读 · 1 评论 -
unicode字符集和UTF-8编码
字符编码原创 2017-03-02 21:23:19 · 599 阅读 · 0 评论 -
原码、反码、补码
原码、反码、补码原创 2017-05-16 10:13:42 · 636 阅读 · 0 评论 -
函数指针与指针函数
函数指针和指针函数区别对比原创 2017-09-19 18:56:47 · 598 阅读 · 0 评论 -
keil 里的补码妙用(keil下的C51)
keil 内存相关。原创 2017-07-28 14:33:09 · 4070 阅读 · 0 评论 -
关于有符号数的移位操作
特殊对待有符号负数的移位操作。原创 2017-07-28 15:36:06 · 4080 阅读 · 0 评论 -
const 与 指针的各种结合
const 和 指针的混搭。。原创 2018-01-01 19:41:51 · 671 阅读 · 1 评论 -
OJ 常见词释义
Accepted: 你的答案符合判题标准Runtime Error: 你的程序运行时出现错误(指针越界,栈溢出,有未处理的异常,主函数返回值非零等)Time Limit Exceeded: 你的程序执行时间超出题目要求Memory Limit Exceeded: 你的程序内存使用超出题目要求Compile Error: 你的程序在编译(包括链接)时出现错误Wrong Answer: 你的程序输出的答原创 2017-02-04 15:16:30 · 648 阅读 · 0 评论