C
文章平均质量分 63
C语言
cj5785
知其然,更要知其所以然
展开
-
C学习笔记-预备知识
计算机结构组成CPU(中央处理器)(控制器+运算器)存储器(内存+外存)输出设备输入设备计算机系统组成硬件系统主机中央处理器运算器控制器内存储器只读存储器随机存储器外部设备输入设备输出设备外存储器软件系统系统软件操作系统语言处理系统系统服务程序数据库管理系统应用软件文字处理软件表格处理软件辅助设计软...原创 2019-04-02 22:22:54 · 1750 阅读 · 0 评论 -
C学习笔记-第一个C语言程序
第一个C语言程序#include<stdio.h> //1int main() //2{ printf("This is a C language"); //3 return 0; //4}以上是一个最简单的C语言程序,但却包含了C的很多重要语法。//在C语言中作为注释,表示注释一行,从//以后的一行内容被注释。/**/表示多行注释,注释多行,注:多...原创 2019-04-02 22:25:17 · 1720 阅读 · 0 评论 -
C学习笔记-数据类型
常量在程序中不可变化的量,也就不可赋值常用两种定义方式,#define和const另外还有一个字符串常量define#define MAX 100#define在预编译的时候,其实也是做的简单文本替换可以通过gcc -E test test.c进行验证注:使用define定义时候叫做宏定义,其原理类似于include,其后没有双引号constconst定义一个变量,一旦定义以...原创 2019-04-02 22:34:45 · 1483 阅读 · 0 评论 -
C学习笔记-小程序(长期更新)
产生随机数int t = (int)time(NULL);srand(t);int num = rand() % 10;利用keybd_event函数自动打印,mouse_event函数保存文件#include <Windows.h>void data(char str);int main(){ WinExec("notepad",SW_MAXIMIZE); ...原创 2019-04-02 22:36:02 · 1668 阅读 · 0 评论 -
C学习笔记-字符串的格式化输出和输入
存储方式字符串是内存中一段连续的char空间,以’\0’结尾字符串就是0结尾的连续char的内存‘\0’ <=> 0 <=> nullprintf函数,putchar函数printf格式字符字符对应数据类型含义dint接受整数值并将它表示为有符号的十进制整数hdShort int短整数huUnsigned shor...原创 2019-04-02 22:41:03 · 1655 阅读 · 0 评论 -
C学习笔记-运算符
一些基本概念数据对象:泛指数据在内存的存储区域左值:表示可以被更改的数据对象右值:能赋给左值的量算数运算符运算符描述实例+把两个操作数相加a + b-从第一个操作数中减去第二个操作数a - b*把两个操作数相乘a * b/分子除以分母a / b%取模运算符,整除后的余数a % b++自增运算符,整数值增加 1a+...原创 2019-04-02 22:42:02 · 1655 阅读 · 0 评论 -
C学习笔记-流程控制
常用的流程图符号起止框用于表示流程的开始或结束;输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容;判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续的操作;处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程线的标准流向是从左到右和从上到下,可用直线表示,非标准流向的...原创 2019-04-02 22:46:07 · 2210 阅读 · 0 评论 -
C学习笔记-数组
数组的概念数组是一组具有相同数据类型的变量集合,这里要注意两点,数组只能存储相同的数据类型和数组的内存是连续的,这位数组和指针的联系奠定了基础。一维数组定义及初始化一维数组指的是只有一个下标的数组,它用来表示一组具有相同类型的数据其格式为类型说明符 数组名[常量表达式];e.g.int arr[3];上式表达的是定义了一个一维数组,其数据类型是int,arr是数组名称,3表...原创 2019-04-02 22:54:22 · 1827 阅读 · 0 评论 -
C学习笔记-字符串
对于C语言来说,字符串其实就是最后一个元素为’\0’的char数组字符数组的初始化字符数组常见的有两种初始化方式char str[] = "hello";或者char str[] = {'h', 'e', 'l', 'l', 'o'};当使用sizeof(str)时,得到的大小为6,此时是算上了’\0’的。如果不指定数组长度的初始化,末尾加上’\0’,否贼输出长度未知char ...原创 2019-04-02 22:55:24 · 1847 阅读 · 0 评论 -
C学习笔记-函数
函数的定义返回值类型 函数名([[参数类型 参数名1],[参数类型 参数名2],···,[参数类型 参数n]]){ //执行语句 return 返回值;}返回值类型:用于限定函数返回值的数据类型;函数名:表示函数的名称,该名称可以根据标识符命名规范来定义;参数类型:用于限定调用方法时传入参数的数据类型;参数名:用于接收调用方法时传入的数据;return关键字:用于结束函数...原创 2019-04-02 22:56:16 · 1666 阅读 · 0 评论 -
C学习笔记-多源文件的编译
多源文件的意义为了精简代码和更好的维护代码,往往需要将一些功能实现的代码与主函数代码分开来在使用的时候再主函数中调用多源文件的使用假设现有my.c和main.c两个源代码文件,现在要再main.c中调用my.c中实现的函数,那么按照规范,应该按如下几步实行:生成相应的头文件(my.h),再该头文件中声明函数再要调用的文件内使用include包含(#include “my.h”)注...原创 2019-04-02 22:56:57 · 2204 阅读 · 0 评论 -
C学习笔记-指针
指针的概念指针也是一个变量,指针变量的值是另一个变量的地址换句话说就是,指针存放的是一个内存地址,该地址指向另一块内存空间指针变量的定义指向一个变量的变量int *p = NULL;p = &i;int *p = &i;int *p; //表示定义一个指针变量p = &i; //表示指针变量p指向i的地址*p; //代表指针所指内存的实际数据指针赋...原创 2019-04-02 22:59:51 · 2962 阅读 · 1 评论 -
C学习笔记-内存管理
作用域一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域代码块是{}之间的一段代码同一个代码块不可以有重名变量auto自动变量一般情况下代码块内部定义的变量都是自动变量也可以显示的使用aotu关键字auto int i;register寄存器变量通常变量在内存当中,如果能把变量放到CPU的寄存器里面,代码执行效率会更高寄存器变量存在于CPU,没有内存地址,不...原创 2019-04-02 23:00:40 · 1649 阅读 · 0 评论 -
C学习笔记-结构体
结构体的定义和初始化结构体是简单数据类型的综合struct man{ char name[100]; int age;};struct man m = { "tom", 12 };struct man m = { .name = "tom", .age = 12 };访问结构体成员要访问结构体成员,要使用.操作符。m.age;结构体的内存对齐模式结构在内存的大小是和结...原创 2019-04-02 23:01:26 · 1792 阅读 · 0 评论 -
C语言之联合体
联合union是一个能在同一个存储空间存储不同类型数据的类型联合体所占的内存长度等于其最长成员的长度,也有叫做共用体联合体虽然可以有多个成员,但同一时间只能存放其中一种对于联合体来讲最基本的原则是,一次只操作一个成员变量,如果这个变量是指针,那么一定是处理完指针对应的内存之后再来使用其他成员union variant{ int ivalue; char cvalue; double ...原创 2019-04-02 23:02:01 · 1580 阅读 · 0 评论 -
C学习笔记-枚举
枚举定义可以使用枚举(enumerated type)声明代表整数常量的符号名称,关键字enum创建一个新的枚举类型实际上,enum常量是int类型的枚举的本质就是int型的常量enum spectrum { red, yellow, green, blue, white, black };//申明一个枚举类型enum spectrum color;//定义一个枚举变量void f...原创 2019-04-02 23:02:39 · 1708 阅读 · 0 评论 -
C学习笔记-typedef
typedef是一种高级数据特性,它能使某一类型创建自己的名字typedef unsigned char BYTE;typedef struct man MAN;BYTE b = 0x12;与#define不同,typedef仅限于数据类型,而不是能是表达式或具体的值typedef是编译器处理的,而不是预编译指令typedef比#define更灵活直接看typedef好像没...原创 2019-04-02 23:03:21 · 1314 阅读 · 0 评论 -
C学习笔记-文件操作
文件操作大致分三步打开文件读写文件关闭文件二进制和文本模式的区别在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别...原创 2019-04-02 23:04:26 · 1603 阅读 · 0 评论 -
C学习笔记-结构体与二进制文件增删改查
使用结构体整理数据,然后利用二进制存储文件,这样存储的文件类似于数据库,可以实现文件的增删改查定义结构体struct student{ unsigned int ID; char name[20];};创建二进制文件int main(int argc, char *args[]){ struct student st[10] = { {1, "a"}, {2, "b"}, {...原创 2019-04-02 23:05:07 · 2166 阅读 · 0 评论 -
C学习笔记-基础数据结构与算法
数据结构数据(data)是对客观事物符号表示,在计算机中是指所有能输入的计算机并被计算机程序处理的数据总称。数据元素(data element)是数据的基本单位,在计算机中通常做为一个整体进行处理。数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。数据类型(data ...原创 2019-04-02 23:08:01 · 1270 阅读 · 0 评论 -
C学习笔记-makefile
除非最简单的项目,任何一个商业项目都会包含多个源代码,而且在编译的时候会有很长很复杂的指令,为了编译的简单可行,makefile由此而生,在编译时候直接输入make便会按照makefile里面的规则编译源代码。Android的源代码就是通过makefile管理的。make的工作原理make通过makefile得到编译规则,从而编译源文件makefile是以一个文本形式的脚本告诉make编译器...原创 2019-04-02 23:09:03 · 1224 阅读 · 0 评论 -
C学习笔记-gcc
GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序gcc的优点使用gcc,程序员可以控制生成二进制执行文件中调试代码的数量和类型。和其他编译器一样,gcc也可以优化执行代码。gcc是个交叉平台编译器,所以能够在当前CPU平台上为不同操作系统开发软件。gcc对C和C++进行了一些扩展,有助于提高执行效率以及编译器进行代码优化。gcc...原创 2019-04-02 23:10:18 · 1304 阅读 · 0 评论 -
深入理解C语言-深入理解void
void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据void含义void几乎只有注释和限制程序的作用,定义一个void变量没有意义void的真正作用在于对函数返回的限定对函数参数的限定在C语言中,void *可以接受任意类型指针的赋值,而不需要进行内存强制转换void *p1;int *p2;p1 = p2;但这并不意味着,v...原创 2019-04-02 23:22:52 · 1400 阅读 · 0 评论 -
深入理解C语言-深入理解指针
关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针。指针是一种数据类型指针也是一种变量,占有内存空间,用来保存内存地址指针就是告诉编译器,开辟4个字节的存储空间(32位系统),无论是几级指针都是一样的*p操作内存在指针声明时,* 号表示所声明的变量为指针在指针使用时,* 号表示操作指针所指向的内存空间中的值*p相当于通过地址...原创 2019-04-02 23:24:38 · 2264 阅读 · 0 评论 -
深入理解C语言-指针使用的常见错误
改变空指针内存的值这个错误很常见,不仅是空指针,还包括改变系统内存空间的值int *p = NULL;···*p = 10;没有释放内存或者释放位置不对在堆中开辟内存以后,使用完成必须释放内存,否则会造成内存泄漏int *p = (int *)malloc(100);···free(p);很多时候在使用指针时候,会对指针指向进行操作,操作完成后直接释放内存,会造成程序错误...原创 2019-04-02 23:26:38 · 1444 阅读 · 0 评论 -
深入理解C语言-接口封装设计思想
断层思维在设计时候,不需要知道实现,只需要知道如何使用接口设计的设计思路Sckclient客户端api模型第一套API(*.h)#ifndef _SCK_CLINT_H_#define _SCK_CLINT_H_#ifdef __cplusplusextern "C" {#endif//函数声明// 1、客户端环境初始化int sckClient_init(void...原创 2019-04-02 23:28:02 · 2869 阅读 · 0 评论 -
深入理解C语言-深入理解内存四区
数组与指针当数组做函数参数的时候,会退化为一个指针此时在函数内是得不到数组大小的因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数void func(int arr[], int num){ ···}若存在以上函数,c/c++编译器在编译的时候,会将数组优化为一个指针,指向数组的首地址,因此无法通过sizeof获得数组大小以下可看作是c/c++编译器的优化过...原创 2019-04-02 23:31:22 · 1331 阅读 · 0 评论 -
深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别第一种内存模型char *arr[]若有如下定义char *arr[] = {"abc", "def", "ghi"};这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char * []),数组的每个元素都是一个地址。在使用的时候,若要使用中间量...原创 2019-04-02 23:32:41 · 1518 阅读 · 0 评论 -
深入理解C语言-深入理解数组
数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言数组概念元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小内存角度:联系的一大片内存空间数组初始化数组元素的个数可以显示或隐式指定数组的初始化可以用{ 0 },也可以使用memset初始化int main(){ int i = 0; int a[10] = { 1, 2 }; //其他初...原创 2019-04-02 23:34:25 · 1336 阅读 · 0 评论 -
深入理解C语言-结构体做函数参数
结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址结构体定义struct Man{ char name[64]; int age;};结构体可以与typedef结合使用typedef struct _Man{ char name[64]; int age;}Man;另外,可以直接定义结构体变量typedef struct ...原创 2019-04-02 23:35:25 · 13698 阅读 · 0 评论 -
深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作。函数类型基础函数三要素: 名称、参数、返回值C语言中的函数有自己特定的类型C语言中通过typedef为函数类型重命名,类似于定义数组typedef type name[m];//定义数组类型typedef type name(parameter li...原创 2019-04-02 23:36:11 · 1255 阅读 · 0 评论 -
C学习笔记-gdb
gdb即GNU debugger,用来调试程序gdb使用前提要使用gdb,则需要在编译源代码时候使用-g参数gcc -g –o test test.c启动gdbgdb 程序名 [corefile]corefile是可选的,但能增强gdb的调试能力Linux默认是不生成corefile的,所以需要在用户profile文件中添加ulimit -c unlimited,修改完成之后让p...原创 2019-04-02 23:37:18 · 1187 阅读 · 0 评论 -
C学习笔记-字符串处理函数
字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include <stdio.h>#include <string.h>int main(void) { char s...原创 2019-04-02 23:38:20 · 1220 阅读 · 0 评论