C
DSH2418C
这个作者很懒,什么都没留下…
展开
-
C语言学习笔记1——有符号数和无符号数
有符号数和无符号数C语言中:· signed 关键字声明变量为有符号类型 · unsigned 关键字声明变量为无符号类型注意: C语言中只有整数类型能够声明unsigne变量有符号数和无符号数的分析1:表示法有符号数(signed):· 在计算机内部用补码表示有符号数 —最高位为 0, 表示这个数为正数 —最高位为 1, 表示这个数为负数正数的补原创 2018-02-02 15:48:56 · 1460 阅读 · 0 评论 -
C语言学习笔记9——逻辑运算符
&& 和 || 的分析1 : 程序中的短路在C语言中:|| 从左向右开始计算:当遇到为真的条件时停止计算, 整个表达式为真所有表达式为假时表达式才为假&& 从左向右开始计算:当遇到假的条件时停止运算, 整个表达式为假所有条件为真时表达式才为真&& 和 || 的分析2:优先级在C语言中:逻辑表达式中, &a...原创 2018-02-21 21:16:14 · 416 阅读 · 0 评论 -
C语言学习笔记21——多维数组和多维指针
多维指针:(指向指针的指针)在C语言中:指针的本质是变量指针会占用一定的内存空间可以定义指针的指针来保存**指针变量的地址值为什么需要指向指针的指针指针变量也同样存在传值调用和传址调用/* 测试代码 重置动态空间的大小*/#include <stdio.h>#include <malloc.h>int reset(cha...原创 2018-03-01 16:35:36 · 240 阅读 · 0 评论 -
C语言学习笔记22——数组参数和指针参数
数组参数和指针参数的分析:退化在C语言中:数组参数将会退化为指针退化的意义:C语言中只会以值拷贝的方式传递参数C语言以高效作为最初设计目标,当向函数传递数组时:将整个数组拷贝一份传入函数 (不可取,效率过低, 数组太大时会导致栈溢出)将数组名看做常量指针传数组首元素地址(可取)多维数组(例:二维数组)二维数组同样存在退化的问题二维数组可以看做是一维数组二维数...原创 2018-03-01 20:58:23 · 269 阅读 · 0 评论 -
C语言学习笔记23——函数和指针分析
函数与指针分析1:函数类型C语言中的函数有自己特定的类型函数的类型由返回值, 参数类型和参数个数共同决定int add(int i, int j) 的类型为 int(int, int)C语言中通过typedef为函数类型重命名typedef type name(parameter list)例:typedef int f(int, int); // 重命名typed...原创 2018-03-02 11:45:50 · 236 阅读 · 0 评论 -
C语言学习笔记24——动态内存分配
动态内存分配的分析1:意义C语言中的一切操作都是基于内存的变量和数组都是内存的别名内存分配由编译器在编译期间决定定义数组的时候必须指定数组长度数组长度是在编译期就必须确定的动态内存分配的分析2:malloc 和 free在程序运行的过程中,可能需要使用一些额外的内存空间malloc 和 freemalloc 和free 用于执行动态内存分配和释放mallo...原创 2018-03-02 19:24:09 · 274 阅读 · 0 评论 -
C语言学习笔记25——栈,堆和静态存储区
程序中的栈栈是现代计算机程序中最重要的概念之一栈在程序中用于维护函数调用上下文函数中的参数和局部变量存储在栈上栈保留了一个函数调用所需的维护信息参数返回地址局部变量调用上下文… 函数调用过程每次函数调用都对应着一个栈上的活动记录调用函数的活动记录位于栈的中部被调函数的活动记录位于栈的顶部函数调用时,对应的栈空间在函数返回前是专用的函数调用结束后,栈空间...原创 2018-03-02 22:05:50 · 262 阅读 · 0 评论 -
C语言学习笔记10——位运算符分析
位运算符的分析1:效率在C语言中:位运算符直接对bit位进行操作, 其效率最高左移和右移运算符注意点左操作数必须为整数类型char 和 short 被隐式转换为 int 后进行移位操作右操作数的范围必须为:【0, 31】左移运算符 << 将运算数的二进制位左移规则: 高位丢弃, 低位补 0 小技巧: 左移 n 位相当于乘以 2 的 n 次方, 但效率比数...原创 2018-02-24 13:36:10 · 254 阅读 · 0 评论 -
C语言学习笔记26——程序的内存布局
程序和进程程序是静态的概念,表现形式为一个可执行文件进程是动态的概念,程序由操作系统加载运行后得到进程每个程序可以对应多个进程每个进程只能对应一个程序程序的内存布局堆栈段:在程序运行后(进程)才正式存在,是程序运行的基础(.bss)段:存放的是未初始化的全局变量和静态变量(,data)段:存放的是已经初始化了的全局变量和静态变量(.text)段:存放的是程序中的可执行...原创 2018-03-03 10:48:42 · 199 阅读 · 0 评论 -
C语言学习笔记11——++ 和-- 操作符分析
++和 - - 操作符分析1:本质在C语言中:++ 和 - -操作符对应两条汇编指令前置变量自增(减) 1 取变量值后置取变量值变量自增(减) 1++和 - - 操作符分析2:C语言中的灰色地带C语言中只规定了 ++ 和 - - 对应指令的相对执行次序++ 和 - - 对应的汇编指令不一定连续运行在混合运算中, ++ 和 - - 的汇编指令可能被打断...原创 2018-02-24 16:52:58 · 238 阅读 · 0 评论 -
C语言学习笔记27——内存操作分析
野指针指针变量中的值是非法的内存地址,进而形成野指针野指针不是NULL指针,是指向不可用内存地址的指针NULL指针并无危害,很好判断,也很好调试C语言中无法判断一个指针所保存的地址是否合法野指针的由来局部指针变量没有被初始化指针所指向的变量在指针之前被销毁使用已经释放过的指针进行了错误的指针运算进行了错误的强制类型转换/* 测试代码 */#includ...原创 2018-03-03 15:56:29 · 241 阅读 · 0 评论 -
C语言学习笔记28——函数参数的秘密
函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调用时的实参值函数参数的求值顺序依赖于编译器的实现/* 测试代码 */#include <stdio.h>int func(int i, int j){ printf("%d, %d\n", i, j); return 0;}int main(){ in...原创 2018-03-03 16:57:14 · 324 阅读 · 0 评论 -
C语言学习笔记29——函数与宏分析
函数与宏比较 函数与宏的比较 1 宏是由预处理器直接进行文本替换,编译器不知道宏的存在,参数无法进行类型检查 函数是由编译器直接编译的实体,调用行为由编译器决定的,参数类型进行严格检查 2 宏多次使用会导致最终可执行程序的体积增大 函数是跳转执行的,内存中只有一份函数体存在 3 宏因为是直接展开执行的,无调用开销,效率比...原创 2018-03-03 19:41:25 · 236 阅读 · 0 评论 -
C语言学习笔记20——main函数和命令行参数
main函数的本质C语言中main函数称之为主函数一个C程序是从main函数开始执行的main函数是操作系统调用的函数操作系统总是将main函数作为应用程序的开始操作系统将main函数的返回值作为程序的退出状态下面的 main 函数定义都正确吗?A.main(){}B.void main(){}C.int main(){}D.int m...原创 2018-03-01 10:10:23 · 318 阅读 · 0 评论 -
C语言学习笔记19——数组指针和指针数组分析
数组类型在C语言中:数组有自己特定的数据类型数组的类型由 元素类型 和 数组大小 共同决定 例: int array[5] 的类型为 int[5] C语言中通过 typedef 为数组类型重命名typedef type(name)[size]; 例:typedef int(AINT5)[5]; // 重命名AINT5 iArray; //...原创 2018-02-28 18:10:32 · 191 阅读 · 0 评论 -
C语言学习笔记8——enum, sizeof,typedef
enum的分析在C语言中:enum是一种自定义类型enum的值是可以根据需要自定义的整型值第一个定义enum值默认为0默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变量只能取定义时的离散值enum的特殊意义:enum中定义的值是C语言中真正意义上的常量在工程中enum多用于定义整型常量 /* 测试程序*/#include <...原创 2018-02-18 18:47:51 · 257 阅读 · 0 评论 -
C语言学习笔记2——浮点数
浮点数的分析1:内存中表示方法C语言中:浮点数在内存中的存储方式为:符号位, 指数, 尾数 类型 符号位 指数 尾数 float 1位(第31位) 8位(第23——30位) 23位(第0——22位) double 1位(第63位) 11位(第52——62位) 52位(第0——51位)浮点数的转换:例:原创 2018-02-03 21:18:04 · 888 阅读 · 0 评论 -
C语言学习笔记3——类型转换
类型转换C语言中: 数据类型可以转换强制类型转换隐式类型转换类型转换的分析1:强制类型转换强制类型转换的语法: (type)var_name; (type)name;强制类型转换的结果 目标类型能容纳目标值:结果不变 目标类型不能容纳目标值:结果将产生截断注意:不是所有的强制类型转换都能成功, 当不能进行强制类型转换时, 编译器将产生错误信息原创 2018-02-04 13:44:06 · 322 阅读 · 0 评论 -
C语言学习笔记4——变量属性
变量属性C语言中:变量可以有自己的属性, 在定义变量的时候可以加上 “属性” 关键字 “属性”关键字指明变量的特有意义语法: properey type var_name;变量属性的分析1:auto关键字(自动变量)auto是C语言中局部变量的默认属性auto修饰的变量将被存储于栈上编译器默认所以的局部变量都是auto的int main(){ ...原创 2018-02-04 21:13:54 · 759 阅读 · 0 评论 -
C语言学习笔记13——条件编译使用分析
在C语言中:条件编译的行为类似于C语言中的 if…else…条件编译是预编译指示命令,用于控制是否编译某段代码/*测试代码*/#include <stdio.h>#define C 1int main(){ #if(C == 1) printf("This is first printf...\n"); #else ...原创 2018-02-25 21:34:08 · 353 阅读 · 0 评论 -
C语言学习笔记14——#pragma使用分析
#pragma简介#pragma 用于指示编译器完成一些特定的动作#pragma 所定义的很多指示字是编译器特有的#pragma 在不同的编译器间是不可移植的预处理器将忽略他不认识的#pragma指令不同的编译器可能以不同的方式解释同一条#pragma指令用法:#pragma parameter注:不同的parameter参数语法和意义各不相同#pragm...原创 2018-02-26 17:25:00 · 373 阅读 · 0 评论 -
C语言学习笔记5——void
void 的意义在C语言中:void修饰函数返回值和参数void修饰函数返回值和参数是为了表示 “无”· 如果函数没有返回值, 那么应该将其声明为 void· 如果函数没有参数, 应该声明参数为 voidvoid 的分析1:void变量不存在void变量, C语言中没有定义void究竟是多大内存的别名#include int main(){原创 2018-02-06 18:58:58 · 284 阅读 · 0 评论 -
C语言学习笔记15——指针的本质分析
指针的分析1:* 号的意义在C语言中:在指针声明时, * 号表示所声明的变量为指针在指针使用时, * 号表示取指针所指向的内存空间中的值int i = 0;int j = 0;// 指针声明int* p = &i;// 取值 (* 号类似一把钥匙, 通过这把钥匙可以打开内存, 读取内存中的值)j = *p;指针的分析2:传值调用和传址调用指...原创 2018-02-26 21:26:23 · 341 阅读 · 1 评论 -
C语言学习笔记16——数组的本质
数组的概念在C语言中:数组是相同类型的变量的有序集合 数组大小数组在一片连续的内存空间中存储元素数组元素的个数可以显示或隐式指定例:int a[5] = {1, 2}; int b[] = {1, 2};问题: 1. a[2], a[3], a[4] 的值是多少? 2. b包含了多少元素/* 测试代码 */#include <stdio...原创 2018-02-27 13:15:58 · 319 阅读 · 0 评论 -
C语言学习笔记6——const和volatile
const(只读变量)在C语言中:const修饰的变量是只读的,本质上还是变量const修饰的变量在栈上分配空间const修饰的全局变量在全局数据区分配空间const只在编译器有用, 在运行期无用注意: const修饰的变量不是真的常量, 它只是告诉编译器该变量不能出现在赋值符号的左边/*测试代码*/#include <stdio.h>int main(...原创 2018-02-13 23:05:49 · 249 阅读 · 0 评论 -
C语言学习笔记17——数组与指针
指针的运算指针与整数的运算规则:指针和整数可以进行运算, 其结果为指针p + n <==> (unsigned int)p + n * sizeof(*p)结论: 当指针 p 指向一个同类型的数组的元素时: p + 1 将指向当前元素的下一个元素p - 1 将指向当前元素的上一个元素 /* 测试代码 */#include <stdio....原创 2018-02-27 20:37:04 · 177 阅读 · 0 评论 -
C语言学习笔记7——union
union(联合体)在C语言中:union在语法上与struct相似union只分配最大成员的空间, 所有员共享这个空间/*测试代码*/#include <stdio.h>struct A{ int a; int b; int c;};union B{ int a; int b; int c;};...原创 2018-02-16 22:33:18 · 239 阅读 · 0 评论 -
C语言学习笔记18——C语言中的字符串
字符串的概念字符串是有序字符的集合字符串是程序中的基本元素之一C语言中没有字符串的概念C语言中通过特殊的字符数组模拟字符串C语言中的字符串是以 ‘\0’ 结尾的字符数组编译器总是会在字符串字面量的末尾添加 ‘\0’字符串与字符数组在C语言中:双引号引用的单个或多个字符是一种特殊的字面量存储于程序的全局只读存储区本质为字符数组, 编译器自动在结尾加上 ‘\...原创 2018-02-28 13:49:35 · 256 阅读 · 0 评论 -
C语言学习笔记12——宏定义与使用分析
宏定义在C语言中:#define 是预处理器处理的单元实体之一#define 定义的宏可以出现在程序的任意位置#define定义之后的代码都可以使用这个宏定义宏常量: #define定义的宏常量可以直接使用#define定义的宏常量本质为字面量宏定义的分析1: 宏定义与函数的对比宏表达式被预处理器处理(直接对宏进行文本替换), 编译器不知道宏表达式的存在预...原创 2018-02-25 17:36:40 · 251 阅读 · 0 评论