字符操作、文件操作和CMD命令的使用 最近有点乱,有点忙~~对于一个用惯了C的程序员来说,不容易习惯C++的编程思想。C中有数组,C++中有string。相对来说数组可以有的操作string都能够实现,对字符的操作不需要在程序中使用strcpy,拷贝到char[]中。而且string更多其它封装好的处理功能,可以使用“.”,类的方... 2023-06-13 字符操作文件操作CMD命令string代码文章基础课C语言基础
struct常见用法复习 结构体定义: 第一种:只有结构体定义 1. struct stuff{ 2. char job[20]; 3. int age; 4. float height; 5. }; 第二种:附加变量初始化的结构体定义 1. //直接带变量名Huqinwei 2. struct stuff{ 3. char job[20]; 4. int age; 5. float height; 6. }Huqin... 2023-06-13 struct常见用法复习结构体定义文章基础课C语言基础
编译器某些代码基本计算顺序小解 尽管后缀自加和后缀自减操作符++ 和-- 在输出其旧值之后才会执行运算,但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式“完成” (按照ANSI ... 2023-06-13 编译器操作符文章基础课C语言基础
教你怎样建立和理解非常复杂的声明 这个问题至少有以下3 种答案:1. char *(*(*a[N])())();2. 用typedef 逐步完成声明:typedef char *pc; /* 字符指针*/typedef pc fpc(); /* 返回字符指针的函数*/typedef fpc *pfpc; /* 上面函数的指针*/typedef pfpc fpfpc(); /* 返回函数指针的函数*/typedef fpfpc *... 2023-06-13 函数指针转换文章基础课C语言基础
怎样在程序里获得一个空指针 根据语言定义, 在指针上下文中的常数0 会在编译时转换为空指针。也就是说,在初始化、赋值或比较的时候, 如果一边是指针类型的值或表达式, 编译器可以确定另一边的常数0 为空指针并生成正确的空指针值。因此下边的代码段完全合法:char *p = 0;if(p != 0)然而, 传入函数的... 2023-06-13 指针C语言文章基础课C语言基础
如何动态分配多维数组 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的“列”。以下为一个二维的例子:#include int **array1 = malloc(nrows * sizeof(int *));for(i = 0; i < nrows; i++)array1[i] = malloc(ncolumns * sizeof(int)); 当然,... 2023-06-13 多维数组动态分配文章基础课C语言基础
怎样从键盘直接读入字符而不用等RETURN 键? 在C 里没有一个标准且可移植的方法。在标准中跟本就没有提及屏幕和键盘的概念, 只有基于字符“流” 的简单输入输出。在某个级别, 与键盘的交互输入一般上都是由系统取得一行的输入才提供给需要的程序。这给操作系统提供了一个加入行编辑的机会(退格、删除、消... 2023-06-13 可移植终端驱动函数文章基础课C语言基础
你了解C语言中的关键字volatile吗? 举例如下:view plaincopy to clipboardprint?1.struct task_struct {2. volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */3. void *stack;4. atomic_t usage;5. unsigned int flags; /* per process f... 2023-06-13 C语言关键字volatile文章基础课C语言基础
都是main()函数的循环执行惹的祸 首先我跟大家说下我的一下代码需要实现的功能,非常简单就是在定时其溢出也就是进入中断之后单片机通过串口给我的上位机发送一个验证字符H55,但是调试了一个下午就是没法实现。大家先看看以下程序!void main(void){main_init();}//-----------------主函数初始化-----------... 2023-06-13 main函数循环执行C语言程序设计文章基础课C语言基础
编译器工作过程的11步 源码要运行,必须先转成二进制的机器码。这是编译器的任务。比如,下面这段源码(假定文件名叫做test.c)。#include int main(void){fputs("Hello, world!\n", stdout);return 0;}要先用编译器处理一下,才能运行。$ gcc test.c$ ./a.outHello, world!对于复杂的项目,编译过程还... 2023-06-13 编译器源码工作过程文章基础课C语言基础
深入理解void类型 1.空指针为什么操作系统不是保留一个字节呢?由于内存管理是按页来进行的,因此无法做到单独保留一个字节。尽管如此,但还是有极少数系统设定RAM区从0地址开始,但指向有效变量的指针不会指向0地址。即使“代码区”从0地址开始,但在任何情况下,0地址都不是C语言中任何函... 2023-06-13 void类型空指针代码文章基础课C语言基础
C语言初学者常见的问题 看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。1.书写标识符时,忽略了大小写字母的区别。main(){int a=5;printf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同... 2023-06-13 C语言初学者常见问题文章基础课C语言基础
单片机C语言编程基础源码六则 1.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直到0,然后再从0逐渐增大,一直这样输出。试编写一函数,使从P2口输出的值产生三角波,并且使三... 2023-06-13 C语言程序设计单片机文章基础课C语言基础
写好C语言程序的“三板斧” 虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题,分析问题和解决问题的过程。那么,下文将给你介绍如何耍这“三板斧”。嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。比如我们要处理“猴子选大王”... 2023-06-13 C语言程序设计C文章基础课C语言基础
C/C++语言特点 C语言特点在实际运用过程中可以发现,C语言的一个重要的特色是大量使用函数。比如,所有用C语言编写的程序都必须具有一个名为main的函数,该函数是程序的入口,也就是程序的执行起点,程序将一次执行main函数中的定义的代码,直至main函数的执行完毕,因此,main函数被成为主函数。除主... 2023-06-13 C语言C++数据封装文章基础课C语言基础
4×4矩阵键盘C语言程序参考 #define int8 unsigned int#define int16 unsigned char#define int32 unsigned long#define KEY_PORT PORTD#define KEY_PIN PIND#define ROW1 (1<<0)#define ROW2 (1<<1)#define ROW3 (1<<2)#define ROW4 (1<<3)... 2023-06-13 4×4矩阵键盘C语言程序参考文章基础课C语言基础
如何在程序中得到一个浮点数的组成数(源代码) 要将一个浮点数存入EEPROM,实际上就是要存这四个数。那么如何在程序中得到一个浮点数的组成数呢?浮点数在存储时,是存储连续的字节中的,只要设法找到存储位置,就可以得到这些数了。可以定义一个void的指针,将此指针指向需要存储的浮点数,然后将此指针强制转化为char型,这样,利用指... 2023-06-13 编制浮点数C语言文章基础课C语言基础
码制转换程序设计 以下为双字节定点数至5位BCD码转换程序清单。 LIST p=16f877 INCLUDE p16f877.inc ACCBLO EQU 23 ;存放被转换的双字节整数低8位 ACCBHI EQU 24 ;存放被转换的双字节整数高8位 ACCCLO EQU 26 ;存放5位BCD码 ACCCHI EQU 27 ACCDLO EQU 28 ACCDHI EQU 29 TEMP EQU 2A ;临时寄... 2023-06-13 计数器子程序BCD码文章基础课C语言基础
在ICCAVR中数据类型和指针运算 题记:这两天想在把C51上的一个USB固件程序移值到ATmega8上,可是ICCAVR & Keil C51的一个区别就是对程序存储区的存储和访问,特别是通指针对数组的访问。 在Keil中为了节省数据存储器的空间,通过“code”关键字来定义一个数组或字符串将被存储在程序存储器中: uchar ... 2023-06-13 ICCAVR程序设计指针文章基础课C语言基础
在C语言中通过模板规避潜在错误 假设我们有图 1所示的被简化了的定时器管理模块程序。从构造函数来看,它的三个参数分别指明了定时器的延时时间、回调函数和回调函数的参数,其中的回调函数是通过timer_callback_t类加以封装的。当定时器到期时,它的fire()函数会被调用。间接地,fire()函数调用定时器所保存回... 2023-06-13 C语言模板程序设计文章基础课C语言基础
C语言如何向系统接要存 C语言如何向系统接要存,就有这么三种方式:1、向栈要。2、向堆要。3、向数据段要。这一下就扯出了三种内存空间,内存空间的本质是一样的,一个地址对应一个方框,方框里可以放数据。但是为了更好的去管理这篇空间,于是将空间分成了几个不同的区域,这些区域有:1、栈:存放局部变量。2、... 2023-06-13 C语言内存空间代码段文章基础课C语言基础
数组指针与二维数组详解 1)如何识别二维数组。 假设数组为a[2][5]二维数组肯定是有两个维度,从左到右看: [2]是第一个维度,表示a这个数组里有两个元素。 [5]是第二个维度,需要进入内部观察。第一个维度的每个元素的内部有5个int型的元素。2)“数组名代表数组首元素的地址”这句话既适用于... 2023-06-13 二维数组维度指针文章基础课C语言基础
定义结构体类型变量的方法 1先声明结构体类型再定义变量如:struct student{int num;char name[20];char sex;int age;float score;};struct studentstudent 1,student 2;2.在声明类型的同时定义变量struct student{int num;char name[20];char sex;int age... 2023-06-13 C语言结构体变量文章基础课C语言基础
C/C++编译器-cl.exe的命令选项 1、设置环境变量:PATH=C:\Program Files\Microsoft Visual Studio 8\VC\binINCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\includeLIB=C:\Program Files\Microsoft Visual Studio 8\VC\lib如果提示找不到mspdb80.dll文件,则从... 2023-06-13 CC编译器程序文章基础课C语言基础
关于C语言的底层操作问题 下面结合问题分别进行阐述。问题:移位操作在运用移位操作符时,有两个问题必须要清楚:(1)、在右移操作中,腾空位是填 0 还是符号位;(2)、什么数可以作移位的位数。答案与分析:">>"和"移位的位数左移: 变量名<<移位的位数经过移位后, 一端的位被"挤掉",而另一端空出的位以0 ... 2023-06-13 C语言底层操作移位操作文章基础课C语言基础