
C语言
Xucc_
这个作者很懒,什么都没留下…
展开
-
9. 字符数组与字符串指针
1. 字符串表现形式1.1 字符串初始化 对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量。 char str1[] = "hello world"; 程序在定义字符串指针变量时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str2。char* str2 = "hello world";1.2 字符串打...原创 2018-03-07 16:40:53 · 1464 阅读 · 0 评论 -
18. 函数指针,函数指针数组与指向函数指针数组的指针
C语言是一门面向过程的语言,而面向过程最大的利器就是函数,今天我们就来研究一下函数指针相关的话题。1. 函数指针 首先看一个例子。 #include <stdio.h> #include <stdlib.h> int add(int x, int y) { return x + y; } i...原创 2018-04-30 19:25:52 · 1566 阅读 · 0 评论 -
19. C语言回调函数
回调函数 回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。 我们看两个回调的例子。例1:使用回调函数实现计算器 #include <stdio.h...原创 2018-04-30 20:29:27 · 1414 阅读 · 0 评论 -
2. C语言条件编译
1. 条件编译1.1 判断是否被定义 #define __DEBUG__ 1 // 如果定义了 __DEBUG__ 宏定义,才会进行接下来的编译 #ifdef __DEBUG__ // ==>#if !defined(__DEBUG__) 语句; #endif1.2 条件编译 #if 常量表达式(为真...原创 2018-04-29 11:22:45 · 1382 阅读 · 0 评论 -
4. C语言预定义符号
预定义符号 预处理符号是C标准规定的宏定义符号,总共有五个。 // 进行编译的源文件名称 __FILE__ // 文件当前行号 __LINE__ // 文件被编译的日期 __DATE__ // 文件被编译的时间 __TIME__ // 如果编译器遵循ANSI C,值为1,否则未定义 __STDC__...原创 2018-04-29 11:24:33 · 2052 阅读 · 0 评论 -
7. C语言 #与##
1 # 和 ##1.1 # #:把参数插入到字符串中。 #a -> “a” #define PRINT(x,format)\ printf("the value of " #x " is " #format" \n",x) //printf("the value of " "x" " is" "format原创 2018-04-29 11:26:35 · 1427 阅读 · 0 评论 -
10. C语言string库函数有strlen,strcpy,strcmp,strcat,strstr实现
string.h 是C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。 常用函数有strlen,strcpy,strcmp,strcat,strstr等等,更详细的可以到include文件夹里面查看该文件。1.strlen 功能:求字符串长度, \0 停止查找。 实现方式:计数器,递归,指针减法。 //1.计数器实现 int strl...原创 2018-04-29 12:20:11 · 1804 阅读 · 0 评论 -
11. C语言程序内存分配
学习C语言,不仅要了解C的各种语法,指针数组的应用,我们还应该清楚的认识到,C语言是一门面向底层的语言,它可以直接操作其他语言所不能操作的寄存器等计算机底层设备,并且进行内存管理。像 Java 就不能直接与计算器寄存器打交道,当它进行内存操作或线程操作的时候,就要调用本地方法,而这些本地方法,就是由 C/C++ 写的,Java 也不能进行内存的自主管理。所以,在这里我们了解一下 C语言关于内存...原创 2018-04-29 20:17:00 · 1359 阅读 · 0 评论 -
12. C语言关键字 volatile
volatile 是C语言中的一个关键字,他的出场率很低,但有的时候,它的作用也是至关重要的。 在介绍这个关键字之前,我们先看一个例子。 include <stdio.h> int main() { const int n = 10; int *p = (int *)&n; *p = 20; ...原创 2018-04-29 20:18:02 · 1313 阅读 · 0 评论 -
17. C语言指针数组与数组指针
1. 指针数组 顾名思义,指针数组就是存放指针的数组。 下面是几个指针数组的例子。 int* arr[10]; // 数组拥有10个元素,每个元素是 int* char* arr2[4]; // 4个char* 指针组成的数组 char** arr3[5]; // 5个二级指针组成的数组 指针数组是一个数组,存放的元素是指针。再看下面的例子。...原创 2018-04-30 18:54:58 · 1538 阅读 · 0 评论 -
16. memcpy与memmove
1. memcpy 内存拷贝(不相干内存拷贝)。以字节为单位进行拷贝,指针类型为空指针,所以它可以进行int,char等不同类型间同类型的拷贝,而strcpy只能进行字符串拷贝内存拷贝。src和dest所指的内存区域可能重叠,但是如果src和dest所指的内存区域重叠, 那么这个函数并不能够确保src所在重叠区域在拷贝之前不被覆盖,所以当区域重叠的时候,会出现意外。而使用memmov...原创 2018-04-30 18:52:57 · 1352 阅读 · 0 评论 -
0.C语言编译过程详解及Linux环境下的验证
由于 visual studio 这一宇宙第一IDE的存在,使我们开发C程序事半功倍,但是同时也造成了很多人对一个C源程序实际的编译过程一无所知,所以本文讲给大家介绍一下一个C源程序从文本到可执行程序的转变过程。1. 程序环境 我们将程序所处的环境称为程序环境,而程序环境分为翻译环境与运行环境。 翻译环境:创造可执行文件的环境 运行环境:用户使用可执行文件的环境...原创 2018-03-11 22:37:18 · 1683 阅读 · 0 评论 -
8. 判断多个数字中是否有相等的数字
在日常的编程中,经常会遇到求一组数据中是否有相同数字的情况,这个问题其实还是相对比较棘手的,我将用一道很经典的题来探讨这个问题。 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; ...原创 2018-03-21 10:58:45 · 9971 阅读 · 0 评论 -
5. C语言基本数据类型及构造数据类型,浮点型存储规则及内存模型
其实学习C语言的时候有一件很头疼的事就是各种各样的数据类型,不同的场合不同的用途不同的数据要使用不同的数据类型,那又为什么要分出这么多种类型呢,因为类型决定了开辟空间的大小,开辟空间的大小又决定了存储的范围。今天,就数据类型这个问题我们来掰扯掰扯。 C语言的内置数据类型大体上可以分为两类,整形家族与浮点数家族。1. 整形家族1.1 字符类型 char 为什么要把一个...原创 2018-03-25 23:04:59 · 3582 阅读 · 1 评论 -
1. C语言#define关键字
#define 关键字有两个作用,一个是定义标识符,第二个是定义宏。1. 定义标识符 //#define name stuff #define MYINT int 建议不要在define定义的标识符里加分号。2. 定义宏#define 机制有一个规定,允许把参数替换到文本中,这种实现通常叫做宏或定义宏。 //#define name...原创 2018-03-26 00:00:34 · 8890 阅读 · 0 评论 -
3-C语言main()函数参数
通常情况下,我们编辑C程序时,编辑的都是编辑入口函数。 int main() { // return 0; } 显而易见,main函数的返回值是是一个int类型的数(main函数给操作系统返回程序退出码),那么,main函是不是也会有参数呢。 是的,main函数也是有参数的,而且不止一个。main函数参数解析 ma...原创 2018-03-26 12:28:30 · 1533 阅读 · 0 评论 -
6. C语言大小端字节序存储以及存储形式判断
C语言中数据是存储在内存中的,而内存空间又被划分为以字节为单位的连续地址空间,那么,我们定义的变量是在内存中如何存储的呢。我们把变量在内存中的存储分为两种,大端字节序存储与小端字节序存储。1. 小端字节序存储 数据的低字节存储在低地址处,高字节存储在高地址处。2. 大端字节序存储 数据的低字节存储在高地址处,高字节存储在低地址处。3. 为什么会有⼤⼩端模...原创 2018-03-26 22:19:27 · 1743 阅读 · 0 评论 -
14. C语言递归思想
程序调⽤⾃身的编程技巧称为递归(recursion)。 递归做为⼀种算法在程序设计语⾔中⼴泛应⽤。⼀个过程或函数在其定义或说明中有直接或间接调⽤⾃身的⼀种⽅法。 它通常把⼀个⼤型复杂的问题层层转化为⼀个与原问题相似的规模较⼩的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,⼤⼤地减少了程序的代码量。 递归的主要思考⽅式在于:把⼤事化⼩。 递归的...原创 2018-04-29 20:28:17 · 2449 阅读 · 0 评论 -
15. C语言可变参数列表解析
C语言的可变参数列表是一项非常有意思的技术,它可以使函数接收不确定个数个参数,来达到某些特定场合的要求。 另外可变参数列表与C程序的栈帧是紧密结合的,所以,建议大家先参考一下这篇讲解C语言栈帧的文章 函数的调用过程(栈帧)详解 来看一个例子: #include <stdarg.h> //头文件 //可变参数的平均值函数 int ...原创 2018-04-30 09:44:31 · 1634 阅读 · 0 评论 -
13. 函数的调用过程(栈帧)详解
本篇,我们对C语言函数的调用进行一个深入地研究。1. main函数的调用过程 首先我们看一个代码。 #include <stdio.h> #include <stdlib.h> int add(int x, int y) { return x + y; } int main() { ...原创 2018-04-29 20:21:34 · 1744 阅读 · 0 评论