![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 53
恋天的风
这个作者很懒,什么都没留下…
展开
-
./ 当前目录 ../ 父级目录 / 根目录
./当前目录../ 父级目录/ 根目录原创 2019-03-12 09:54:47 · 3019 阅读 · 0 评论 -
字符串指针数组
#include <stdio.h>const char *CommandList[4] = { "help", "version", "bitXXX", "error"};int i;in...原创 2019-02-19 10:44:15 · 131 阅读 · 0 评论 -
C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式方式一 二维字符串数组声明:char name[4][10] = { "Justinian", "Momo", "Becky", "Bush" };在内存中的存储:J u s t i n i a n \0 M o m o \0 \0 \0 ...转载 2019-02-19 09:59:35 · 12728 阅读 · 0 评论 -
C语言实现大小写字符转换
问题描述: 输入一串字符串,将其中的大写字母换成小写,小写字母换成大写输出。 例如: 输入:ASDFGHJzxcvb 输出:asdfghjZXCVB解题思路: 将一个小写字符转换成大写字符,只需要将这个字符减去32;将一个大写字符转换成小写字符,则给这个字符加上32;代码实现:#include<stdio.h>int main(){ while (1)...转载 2019-02-19 09:38:59 · 8441 阅读 · 0 评论 -
typedef struct 指针
#include <stdio.h>int main(){ typedef struct std { char name[10]; int year; }Std,*pStd; Std s1={"li ming",2019}; pStd p1; p1=&s1; printf("s1.na...原创 2019-02-27 14:41:56 · 1405 阅读 · 0 评论 -
(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack) bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data segment)通常是指用来存放...转载 2019-01-22 17:36:42 · 299 阅读 · 0 评论 -
CRC16 C语言实现
#include <stdio.h> void InvertUint8(unsigned char *dBuf,unsigned char *srcBuf){int i;unsigned char tmp[4];tmp[0] = 0;for (i=0; i< 8; i++) {if (srcBuf[0]& (1 << i))...原创 2019-01-16 11:02:18 · 1440 阅读 · 0 评论 -
error: stray ‘\357’ in program——输入了中文的标点符号
error: stray ‘\357’ in program 20 int main(void){ 21 sigset_t s,p; 22 sigemptyset(&s); 23 sigaddset(&s,SIGINT);//;& ;这里的分号写成了中文的,所以出现了乱码 24 ...转载 2019-01-16 10:47:05 · 600 阅读 · 0 评论 -
keil里中断服务函数设置标志位时加volatile
在中断服务函数中,如果设置标志位,然后其他函数判断标志位,需要设置全局变量来实现。全局变量的声明中需要添加修饰符volatile,防止编译器对变量进行优化,导致程序出错。 下面是volatile的用法说明:volatile用于防止相关变量被优化。 例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加volatile,编译器会把这些寄存...转载 2019-01-14 20:27:03 · 1207 阅读 · 0 评论 -
头文件中extern “C”的理解
C语言的. h头文件常会看到如下做法:#ifdef __FUNC_H_#define _FUNC_H_#ifdef __cplusplus__extern "C" {#endif#include<stm32f10x.h>int foo(char ,int );#ifdef __cplusplus__}#endif#endif开始看别人的代...原创 2019-01-13 19:33:06 · 1592 阅读 · 0 评论 -
C语言中的volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void...转载 2019-01-02 21:02:16 · 368 阅读 · 0 评论 -
p2=&((int*)&b)定义错误解析
#include <stdio.h>int main() { int a,b; int*p1; int**p2; p1=&a; p2=&((int*)&b); printf("p1=%x\r\n",p1); printf("p2=%x\r\n",p2); return 0;}结果: er...原创 2018-12-30 15:34:28 · 651 阅读 · 1 评论 -
C语言中使用union测试机器的大小端模式
#include <stdio.h>int main() { union checksys { int i; char ch; }c; c.i=1; if(c.ch==1) printf("小端模式"); else printf("大端模式"); return 0;} ...原创 2018-12-25 00:23:56 · 354 阅读 · 1 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a...转载 2019-02-20 09:33:42 · 108 阅读 · 0 评论 -
数组相关概念
#include <stdio.h>int main(){ int a[5]={1,2,3,4,5}; printf("&a[0]=%d\n",&a[0]); printf("&a=%d\n",&a); printf("&a[0]+1=%d\n",&a[0]+1); printf(&qu原创 2019-02-20 09:52:32 · 109 阅读 · 0 评论 -
含数字的字符('0','1','2','3','4','5','6','7','8','9')转数字(1,2,3,4,5,6,7,8,9)
#define CharToNumber(x) (x-'0')原创 2019-02-20 18:51:48 · 2712 阅读 · 0 评论 -
STRUCT_OFFSET( s, m )宏
#define STRUCT_OFFSET( s, m ) ( (UINT8)( & ((s *)0) -> m ) ) /* 定义获取结构成员相对偏移地址的宏 */如上宏的意义,获取结构体S中元素M,相对于首元素的偏移量。#include <stdio.h>#define STRUCT_OFFSET(s,m) ( (int)(&...原创 2019-03-11 15:52:04 · 741 阅读 · 0 评论 -
C语言中使用指针修改const的值
#include <stdio.h>int main(){ const int a=10; //若const a=10,编译器也会默认为a是int类型的 int *P=(int*)&a; //注意需要强制&a前需要加int*类型强制类型转换 *P=12; printf("a=%d\n",a); return 0;}结果:a=12...原创 2019-03-15 00:14:51 · 2659 阅读 · 6 评论 -
嵌入式软件工程师经典面试题
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL1我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出...转载 2019-03-04 19:42:24 · 1214 阅读 · 0 评论 -
面试题:最常见最有可能考到的C语言面试题汇总
1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL(无符号长整型)2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(A,B) ((A) <= (B)? (A) : (B))4. 嵌入式系统中经常要用到无限循环...转载 2019-03-04 11:43:16 · 455 阅读 · 0 评论 -
C语言逗号表达式
c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,(a=3*5,a*4)的值是60,原因在于赋值运算优先级高于逗号表达式。逗号表达式的要领:1.从左到右逐个计算;2.逗号表达式作为一个整体,它的值为最后一个表达式的值;3.逗号...转载 2019-03-04 11:24:36 · 865 阅读 · 1 评论 -
函数可重入性及编写规范
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可...转载 2019-03-03 21:50:36 · 653 阅读 · 0 评论 -
指针常量和常量指针
指针常量指针常量:顾名思义它就是一个常量,但是是指针修饰的。格式为:int * const p //指针常量在这个例子下定义以下代码:int a,b;int * const p=&a //指针常量//那么分为一下两种操作*p=9;//操作成功p=&b;//操作错误因为声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是...转载 2019-03-09 00:11:57 · 100 阅读 · 0 评论 -
int int*分别占多少字节
先说指针,指针不同于普通变量,存的是地址,指针的范围只和机器字和系统有关在32位系统中,所有指针都是4B(0x00000000~0xFFFFFFFF)在64位系统中,所有指针都是8Bchar 1Bint 4B(16位机为2B)Float 4double 8...转载 2019-03-03 20:18:03 · 3506 阅读 · 0 评论 -
C语言面试题
1.请问这种定义结构体正确吗?如果有问题,问题在哪儿。struct a { int x; char y; struct a z; struct a *p;}答:错误有两点。1.不能在结构体声明中定义结构体变量(struct a z);2.}后面没有加分号(;).以下为正确做法。struct a { int x; char y;...原创 2019-03-03 19:53:37 · 268 阅读 · 0 评论 -
STM32中的断言
#ifdef USE_FULL_ASSERT/** * @brief The assert_param macro is used for function's parameters check. * @param expr: If expr is false, it calls assert_failed function which reports * ...转载 2019-03-08 18:31:49 · 378 阅读 · 0 评论 -
C语言 枚举enum、宏定义#define、结构体struct的一种联合应用
#include <stdio.h>typedef enum ENUMDATE{ first=0x01, second=0x02, third=0x03}enumdate;//宏跨行,需要用续行符#define DATEDE \ { \ first, \ second, \ third \} ...原创 2019-03-08 17:48:13 · 537 阅读 · 0 评论 -
C/C++中#define宏定义的作用域
#include <iostream>using namespace std;void t(void){ #define a 10}int main(){ cout << a<<endl; return 0;}如上代码编译,打印输出结果为10。由此可见#define的作用域是文件作用域,在定义之后的位置使用都有效。改变其...原创 2019-03-08 15:47:53 · 2725 阅读 · 0 评论 -
char
#include <stdio.h>int main() { char i=1; char j='1'; //字符常量 char k[]="1"; //字符串常量 printf("%d\r\n",sizeof(i)); printf("%d\r\n",sizeof(j)); printf("%d\r\n",sizeof(k)); printf(...原创 2018-12-25 00:22:51 · 126 阅读 · 1 评论 -
C语言中函数指针与指针函数
/**************函数指针************/#include <stdio.h>typedef int (*pFun)(int a,int b);int add(int a,int b);int sub(int a,int b);int mul(int a,int b);int div(int a,int b); int main(void){ ...原创 2018-12-19 00:33:55 · 740 阅读 · 0 评论 -
解析C语言数组中几个重要的概念:a,a+1,&a[0],&a[0]+1,&a,&a+1
#include <stdio.h>int main(void){ int a[4]={0}; printf("a = %x\r",a); //a=&a[0],代表数组首元素的首地址 printf("a+1 = %x\r",a+1);//a+1 printf("&a[0]= %x\r",&a[0]); print...原创 2018-12-18 23:25:32 · 4315 阅读 · 0 评论 -
浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t
一、C语言基本数据类型回顾在C语言中有6种基本数据类型:short、int、long、float、double、char1、数值类型1)整型:short、int、long2)浮点型:float、double2、字符类型:char二、typedef回顾typedef用来定义关键字或标识符的别名,例如:typedef double wages;typedef wag...转载 2018-11-28 20:07:30 · 5760 阅读 · 0 评论 -
在C语言中static关键字的作用
static关键字的作用在C语言中static修饰函数的时候静态函数:作用范围仅限于它的源文件,即只有本文件内才可以调用,函数名在其他文件内不可见。static修饰局部变量的时候局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内静态变量的值也能维持。static修饰全局变量的时候全局静态变量:作用范围局限于它的源文件,即只有本文件内的代码才可以访问它,变量名在其他文件内...原创 2018-11-29 17:42:55 · 2263 阅读 · 0 评论 -
32位操作系统寻址范围与支持的最大内存空间
32位的操作系统能够寻址的地址编号范围是1到2的32次方,而每一个地址都是指的内存中一个字节的地址,所以32位操作系统能够支持访问的的最大内存空间是2的32次方字节,也就是4G的内存空间,根据自己的理解,自己画了张图如下:一个内存地址代表一个字节的地址不是一bit的地址背景知识:在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。...转载 2018-11-19 19:28:55 · 7657 阅读 · 1 评论 -
int
#include <stdio.h> int* Slot_State(void) //定义一个指针函数,该函数的返回值是int*类型的指针 { static int r[10]; int i; for ( i = 0; i < 10; ++i) { r[i] = i; printf( "r[%d] = %d\n", i, r[i]); ...原创 2018-11-07 21:03:44 · 132 阅读 · 1 评论 -
C语言中的指针函数
#include <stdio.h>int* Slot_State(void) //定义一个指针函数,该函数的返回值是int*类型的指针{ static int r[10]; int i; for ( i = 0; i < 10; ++i) { r[i] = i; printf( "r[%d] = %d\n", i, r[i]); ...原创 2018-11-07 14:22:20 · 381 阅读 · 1 评论 -
C语言中static关键字的作用详解
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容复制代码代码如下:char a = 'A'; // global...转载 2018-11-07 14:17:09 · 1839 阅读 · 0 评论 -
C语言中数组的定义错误点修正
错误定义数组的方法:int buff[ ]=[1,2,3];其中错误的地方有两处:1.未定义数组的大小。该数组中有3个元素,因此应为buff[3]。2.数组元素是最外面是用大括号{ }括起来,因此应为{1,2,3}。正确的定义方式为int buff[3]={1,2,3}; ...原创 2018-11-02 20:35:26 · 2876 阅读 · 2 评论 -
结构体中定义函数指针
结构体指针变量的定义,定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct结构体标识符{成员变量列表;…};struct 结构体标识符 *指针变量名;变量初始化一:struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };形式2:在定义类型的同时定义变量struct结构体标识符{成员变量列表;…} *指针变量名;变量...转载 2018-11-06 20:52:43 · 511 阅读 · 0 评论 -
c语言:typedef + struct + 指针
c语言规范,定义结构体:typedef struct ANSWER_HEADER{u8 u8Type;u8 u8Code;u32 u32TimeStamp;struct ANSWER_HEADER *pNext;}ANSWER_HEADER_T, *PANSWER_HEADER_T; ANSWER_HEADER为结构名,这个名字主要是为了在结构体中包含自己...转载 2018-11-06 19:51:15 · 6548 阅读 · 1 评论