
My _C语言
文章平均质量分 50
_SuiXin
不忘初心,方得始终。
展开
-
C-预处理与内存对齐
C-预处理#define #define定义的宏可以出现在代码的任何地方define从本行开始,之后的代码都可以使用这个宏常量我们应避免在宏定义中定义表达式宏表达式与汗水的对比宏表达式在预编译时期被处理,编译器不知道宏表达式的存在宏表达式用“实参”完全替代形参,不进行任何运算宏表达式没有任何调用开销宏表达式中不能出现递归定义C语言没有办法在函数中定义一个函数,但是却可以在函数中定义原创 2015-10-28 21:39:36 · 386 阅读 · 0 评论 -
C-函数杂谈
C-函数杂谈函数的由来 程序 = 数据 + 算法 C程序 = 数据 + 函数 C语言推动了模块化程序设计的产生 面向过程的程序设计(模块化) -> 核心: 函数 面向过程是一种以过程为中心的编程思想 首先将复杂的问题分解为一个个容易解决的问题 分解后的问题可以按步骤一步步解决 函数是面向过程在C语言的实现 解决问题的每个步骤可以用函数事项函数参数 函数参原创 2015-11-14 22:15:29 · 327 阅读 · 0 评论 -
C-动态内存分配与野指针
C-动态内存分配与野指针动态内存分配为什么需要动态内存分配C语言中的一切操作都是基于内存的变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定 比如,定义数组时,必须指定数组的长度,而数组的长度是在编译器就决定的当时,当我们的程序运行是,我们可能会需要一些额外的内存空间malloc,calloc和reallocmalloc所分配的是一块连续的内存,以字节为单位,并不带任何类型原创 2015-11-14 22:13:55 · 479 阅读 · 0 评论 -
C-复杂的声明的阅读
C-复杂的声明的阅读C语言中有许多魔鬼般的声明,让人看到就害怕, 比如: int ((*p)(int))[5]; 这里p是个什么玩意你知道吗?? 其实,对于C语言中的复杂声明,我们只要掌握了一定阅读原则,想知道这个声明到底声明什么东西就很简单了阅读原则 前提: 他们的优先级你应该知道 数组的[]与函数的()有同样的优先级[]与()都是从左到由进行结合的的优先级低于 []与()原创 2015-11-14 22:12:48 · 353 阅读 · 0 评论 -
C-动态在堆上申请二维数组
C-动态在堆上申请二维数组 想要成功的动态在堆上申请二维数组成功,应真的明白二维数组的机构 1. 二维数组的每一维都是一个一维数组 2. 对于 int a[3][3], 那么代表一维数组的常量指针分别为: a[0], a[1], a[2] 3. 二维数组的大小: 一维数 * 二维数下面手工分配二维数组: a[2][2]: #include <stdio.h>原创 2015-11-14 22:09:51 · 917 阅读 · 0 评论 -
C-指针与数组
C-指针与数组指针要点 本质是一个变量, 需要占用一定内存空间, 他被用来保存内存的地址值占用4字节内存空间(32位机), ->即指针占用的字节数, 应能够访问计算机的所有内存地址指针是有类型的, 之所以有类型是为了让CPU在根据指针访问内存时知道该如何取用内存(取多大)在指针声明的地方,表示所声明的变量为指针在指针使用时, 表示取指针所指向内存的值在根据指针取值时, 会依据指针的类型原创 2015-11-14 22:08:42 · 327 阅读 · 0 评论 -
C-字符串
C-字符串基本点从概念上讲, C语言中没有字符串数据类型在C语言中,是使用字符数组来模拟字符串C语言中的字符串都是以’\0’结束的字符数组C语言中的字符串可以分配与栈空间、堆空间或者只读存储区字符串的长度问题 字符串的长度就是字符串中所包含的字符的个数C语言中的字符串的长度指的是第一个’\0’前的字符个数即C语言是通过’\0’结束符来确定字符串的长度经典小例子strlen函数的实现原创 2015-11-14 22:07:12 · 354 阅读 · 0 评论 -
C-程序的组成
C-程序的组成堆、栈和静态存储区栈栈是现代计算机程序中的最为重要的概念之一栈在程序中用于维护函数调用的上下文,没有栈就没有函数,就没有局部变量 函数参数、函数的返回地址局部变量、函数调用上下文函数在被调用时,在栈中是以一个栈帧的形式存在的,栈分为升栈和降栈,不同架构,栈是不同的. T1堆堆是程序中一块巨大的内存空间,可由程序自由使用, 使用时必须申请堆中被程序申请使用的内存在程序主原创 2015-11-14 22:14:18 · 430 阅读 · 0 评论 -
C-指针数组与数组指针
C-指针数组与数组指针说实话, C语言真的很让人蛋疼, 它不像面向对象的语言, 我们重心在设计程序上。 而使用C语言, 你不仅要考虑程序的设计, 你还要考虑很多他的使用细节,不然一不小心你怎么死的都不知道。 但是,个人感觉,C语言的魅力是其他任何语言都比不了的!!!, 继续看。。。基本点 数组类型 C语言中数组有自己特定的类型数组的类型有元素类型和数组大小共同定义, 例如 int ar原创 2015-11-14 22:11:17 · 286 阅读 · 0 评论 -
C- 函数与指针
C- 函数与指针基本点 函数类型 C语言中函数有自己的特定类型函数的类型由返回值,参数类型和参数个数和参数顺序决定int add(int i, char j) 的类型为 int(int, char)typedef来定义函数类型 语法: typedef type name(parameter list)例如 typedef int f(int, int) -> f为函数类型 in原创 2015-11-14 22:10:34 · 349 阅读 · 0 评论 -
C-#与##
C-#与##Point1 (#) #符号用作一个预处理运算符,可以把宏参数转换为字符串,我们可能有下面这个需求 #define Squre1(x) printf("The square of " #x" is %d \n", ((x)*(x))); #define Squre2(x) printf("The square of x is %d \n", ((x)原创 2015-11-14 22:05:38 · 390 阅读 · 0 评论 -
C-结构
C-结构空结构体占用多大的内存?->使用sizeof测试时, 不同的编译器定义的值不同, 但是现代续断编译器把它定义为只占一个字节,这样就避免了出现相同的地址。由结构体产生柔性数组柔性数组:即数组的大小待定 原理:C于语言中结构体的最后一个元素可以是未知大小的数组。 范例: typedef struct _soft_array{ int len;原创 2015-10-28 21:37:23 · 340 阅读 · 0 评论 -
C -金沙粒 1
C -金沙粒 1说明符auto: 局部变量的默认属性,指明变量是在栈上分配空间 static: 1. 修饰局部变量时,局部变量存储在程序的静态区 2. 文件作用域标识符 a, 修饰全局变量, 指明其作用域仅在声明文件中 b, 修饰函数, 说明函数只在本文件有效 register: 1. 指明将变量尽可能的存储在寄存器中,但不一定成原创 2015-10-28 21:31:27 · 378 阅读 · 0 评论 -
C-运算符与贪心法则
C-运算符&&与|| 的短路规则应该都知道。。++看一下自增运算符: ++ -> 这里看一下后增, 即到底什么时候增?? 看下面这两个程序: #include <stdio.h> int g = 0; int f() { return g++; } int main() { if( f() && f() )原创 2015-10-28 21:41:57 · 897 阅读 · 0 评论 -
C-符号与运算符
C-符号与运算符注释1)编译器会在编译的过程中删除注释, 但不是简单的删除而是以空格代替 2)编译器会认为双引号括起来的内容都是字符串,双斜杠也不例外 3)“/../”注释不能被嵌套 4)在编译器看来,注释和其他的程序元素都是平等的。y/*p;->这条语句会被当做注释,那么为什么呢? C在进行符号解析时,遵循贪心法则。即将/*作为一段注释的开始。接续符和转移符“\”作为接续符时,告诉编译器这原创 2015-10-28 21:36:07 · 430 阅读 · 0 评论 -
C-const与volatile
C-const与volatileconst1)const修饰的变量不是真正的常量 1. const用来修饰的变量, 是只读变量, 即还是一个变量, 我们还是可以使用间接方式改变其值 2. const修饰的变量会在内存中占有空间(常量是不会的) 3. 本质上const只对编译器有用,但是在运行时是无用的。 4. const只读变量是不可以直接作为左值的。例如下面代码,只读变量a的值就已经被改变原创 2015-10-28 21:34:04 · 401 阅读 · 0 评论