![](https://img-blog.csdnimg.cn/20200404103822637.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
C基础及实践
xiaotongn
温故而知新
展开
-
[C]指针与数组
指针与数组指针与地址指针是一种保存变量地址的变量,在C中指针使用十分广泛,指针常常是表达式某个计算的唯一途径,且相比其他方法,指针可生成更高效、紧凑的代码。但指针和goto语句一样,会导致程序难以理解,故使用指针需更谨慎。the C programme指出:指针是能够存放一个地址的一组存储单元(通常是两个或4个字节),如果c类型是char,且p是指向c的指针,则可用下图表示它们之间的关系:一元运算符&可用于取一个对象的地址,如下char c;char *p = &c;//访问*原创 2020-05-10 11:05:08 · 365 阅读 · 0 评论 -
C提高~指针及其多种用法
声明:博客内容来源于朱有鹏的C语言内核深度解析指针及其多种用法指针对于操作底层驱动而言,很重要。驱动程序目的是为了管理硬件,驱动程序管理硬件的媒介是寄存器(一种特殊的内存),通过对寄存器这种特殊内地的(取)写(存),从而实现对硬件的功能设置以及数据的存取。所有软件本质都是基于这样的原理在硬件上运行的,从而达到了软件与硬件融为一体的目的。对于指针涉及一下难点:指针 的多级使用; 指...原创 2019-11-09 21:49:06 · 836 阅读 · 0 评论 -
[C]关键知识点的理解
C中关键知识点的理解NULLNULL不是C语言的关键字,本质是一个宏定义,在C/C++中NULL的标准定义:#ifdef _cplusplus //条件编译#define NULL 0#else#define NULL (void *)0 //对应C语言#endif编译器会根据宏_cplusplus值来判断当前的编译环境,在C中,NULL本质是0,但不...原创 2019-10-28 21:36:49 · 341 阅读 · 0 评论 -
C提高~C语言与内存
C语言与内存计算机程序运行的目的什么是程序?最直观的表达:程序 = 数据 + 算法。对于计算机而言,一个程序就是一堆代码加一堆数据。代码告诉CPU如何加工数据,而数据则是被加工的对象。如,写一个加法程序,对于计算机来说,代码告诉CPU是执行加法,数据就是加数和被加数。将加法运算的 过程封装成一个函数,即便不封装成一个子函数,它也是在主函数(main)里,C语言程序就是有一个个函数组成而...原创 2019-10-18 17:41:26 · 413 阅读 · 0 评论 -
数据类型
引言程序对数据进行操作,需要了解数据各种类型、特点及如何声明;同时还会理解变量的三者属性:做用域、链接属性和存储类型,这三个属性决定一个变量的“可视性”(在什么地方使用)和“生命期”(值可以保持多久)。基本数据类型在C语言中,仅有4种基本数据类型---整数、浮点型、指针和聚合类型(如数组和结构体等),其他的类型都是在4中基本数据类型的某种组合派生而来。整型家族包括字符、短整型、...原创 2019-07-10 16:42:46 · 366 阅读 · 0 评论 -
运算符与表达式
运算符与表达式常用运算符分类 运算符类型 作用 算术运算符 用于处理四则运算 赋值运算符 用于将表达式的值赋给变量 比较运算符 用于表达式的比较,并返回一个真值或假值 逻辑运算符 用于根据表达式的...原创 2019-07-04 21:59:32 · 229 阅读 · 0 评论 -
程序流程结构
程序流程结构概述C语言支持最基本的三种程序结构:顺序、选择、循环结构;顺序:程序按顺序执行,不发生跳转 选择:依据是否满足条件,选择执行相应功能 循环:判断条件是否满足,循环多次执行选择结构if语句#include <stdio.h>int main(){ int a = 1; int b = 2; if (a > b) { p...原创 2019-07-08 15:48:21 · 241 阅读 · 0 评论 -
数组和字符串
数组和字符串概述 程序设计中,为了方便处理数据,把具有相同数据类型的若干变量按有序形式组织起来---称为数组 数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续。数组属于构造数据类型:1)一个数组可分解为多个数组元素:数组元素可以试基本数据类型或者构造int a[10];struct S...原创 2019-07-02 20:13:40 · 309 阅读 · 0 评论 -
函数
函数基础函数定义是函数体的实现,函数体是一个代码块,它在函数被调用是执行。与函数定义相反,函数声明出现在函数被调用的地方;函数声明想编译器提供该函数的相关信息,用于确保函数被正确调用;函数定义语法返回类型 函数名(变元说明表){ 说明序列和语句序列}最简单函数结构dummy(){}该结构用作开发程序期间占位符;函数定义中省略了返回类型,...原创 2019-06-29 14:58:06 · 810 阅读 · 0 评论 -
指针
首先看内存概念指内部存储器,用来暂存储程序和数据,掉电即丢失,如:SRAM,DRAM,DDR,DDR2,DDR3,DDR4...与内存对应,还有外存(即外部存储器)用来长时间保存程序和数据,掉电不丢失,如ROM,ERROM,FLASH,硬盘、光盘等。这里还需区分两个概念,物理存储器和存储地址空间,前者指具体的存储器芯片,后者指对存储器的编码范围;编码即对每个物理单元(一个字节)分配一个号...原创 2019-06-22 14:48:07 · 1014 阅读 · 0 评论 -
结构体
结构体结构体是一个或者多个变量的集合,该变量可能属于不同的类型;ANSI C 标准中定义对结构的赋值操作--结构体可以拷贝、赋值、传送给函数并被函数返回。结构基础关键字struct用于引入结构说明,由包含在花括号内一些列说明组成。其后跟的名字是可选的,结构标记用于命名结构。一个结构说明定义一种类型,如 struct {....} x,y,z;结构体说明之后没有定义变量表,则不...原创 2019-04-29 14:45:37 · 618 阅读 · 0 评论 -
内存管理
内存管理一、作用域C语言变量的作用域分为:代码块、函数、文件作用域;局部变量(自动变量):一般情况代码块{}内部定义的变量;特点:一个函数内定义,只在该函数范围内有效;在复合语句中定义,只在复合语句中有效,随着函数调用的结束或复合语句的结束局部变量的声明周期也结束;若没有赋初值,内容为随机值;#include <stdio.h>void test(){...原创 2019-07-06 17:18:10 · 363 阅读 · 0 评论 -
文件操作
1、概述文件有磁盘文件和设备文件;前者指一组数据的有序集合,通过存储在外部介质(磁盘)上,使用时才调用内存;后者指在操作系统中把每一个与主机相连的输出、输入设备看做是一个文件,把它们的输入、输出等同于对磁盘文件的读写。磁盘文件分类计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质都是一样的,以字节为单位进行顺序存储;从用户或者操作系统使用的角度(逻辑上)把文件分为...原创 2019-07-12 21:27:32 · 275 阅读 · 1 评论 -
C语言-动态内存分配
为什么使用动态内存分配?当你声明数组时,必须用一个编译时常量指定数组长度。而由于数组所需要的内存空间取决于输入数据,数组长度常常在运行时才知道。通常声明一个较大的数组,让可以容纳更多的元素。为了避免使用元素数量超过声明的长度,通常会把声明数组得更大一些;但如果实际元素数量较少,声明数组大分部内存空间被浪费了;如果输入数据超过数组范围,需要提示"数组内存溢出"动态内存分配允许程序为一个长...原创 2019-01-31 17:14:05 · 552 阅读 · 0 评论 -
typedef(类型定义)
typedef声明并没创建新的数据类型,只是为已存在的数据类型增加了一个新的名称1.typedef 建立一种新的数据类型名,如声明:typedef int length //将length 定义为和int具有相同意义的名字2.length structsnode{ ... ... }Treenode;创建新的类型关键字:Treenode(一个结构),e...原创 2018-03-11 21:43:23 · 193 阅读 · 0 评论 -
常用关键字static用法
不太常用会遗忘,通过比较来加深印象和理解1.静态变量不能跨函数使用:#include <stdio.h>void f(int q){ q=10;//return 0;}void g(int * p){*p=11;}int main(void){int i,j;f(i);g(&j); printf("i=%d\n",i); print...原创 2018-03-26 16:01:04 · 200 阅读 · 1 评论 -
经典算法1-兔子数量问题
参考:https://blog.csdn.net/u012580143/article/details/66973574题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生”一对”兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?注意:第三个月1,2,3(第三个月开始新的兔子有开始生兔子)程序分析:兔子的规律为数列1,1,2,3,5,...原创 2019-02-16 11:19:34 · 3713 阅读 · 0 评论 -
C经典算法2-素数问题
/*题目2:判断101-200之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。*//*20190217:14:40*/#include<stdio.h>#include<math.h>int main(){ int i,j,k,h=0,mask=1;...原创 2019-02-19 14:44:23 · 254 阅读 · 0 评论 -
C提高~复合数据结构类型
复合数据结构类型引言C语言中复杂的组合数据类型,如数组、字符串、结构体、共用体、枚举等其他组合类型,它们是如何在内存中开辟空间的,以及这些组合数据类型的特点又是如何在内存中体现出来的。现有的操作系统计算机上,为了实现内存的高效利用,操作系统对所有物理内存进行了统一的内存管理,所以应用程序表现出来的都是虚拟内存。管理方式在C语言程序中,存放数据所能使用的内存空间大概分为四种情况:栈(...原创 2019-10-10 18:44:01 · 494 阅读 · 0 评论 -
C提高~变量的存储与关键字限定
变量的存储与关键字限定引言存储类、作用域、生命周期和链接属性中概念的关系往往是相互关联的,都是我们描述变量、函数的关键概念。存储类存储类即存储类型。变量空间开辟于内存之中,存储类就是用于描述变量空间开辟于内存什么地方。内存被分为栈、堆、数据段、bss段和text段等不同管理方法的内存段,变量空间开辟于这些内存段中。如局部变量被分配在栈中,那么它的存储类就是栈;被显式初始化为非0的全...原创 2019-10-08 20:29:40 · 251 阅读 · 0 评论 -
C提高~函数及库函数
函数本质为什么会有函数? 在复杂程序中,整个程序被分成了多个源文件,一个文件分成多个函数,一个函数分成多个语句,这就是整个程序的组织形式。函数的出现是人(程序员和架构师)的需要,而不是机器(编译器、CPU)的需要。函数目的就是实现模块化编程,既让代码的可读性好,又方便分工,利于程序的组织。函数书写一般原则遵循一定格式:函数返回类型、函数名、参数列表等; 一个函数只做一件事...原创 2019-10-07 10:33:34 · 206 阅读 · 0 评论 -
C提高~预处理
引言预处理所做工作涉及头文件包含、常见注释风格、宏定义使用及各种预条件编译的作用。函数库主要涉及静态库和动态库;为什么需要编译链接看下下编译流程举一个简单的例子,helloc#include<stdio.h>int main(int argc,char *argv[]){ printf("hello world\n"); return 0...原创 2019-10-06 14:30:45 · 163 阅读 · 0 评论