
C语言
文章平均质量分 89
食梦少年
仰望大牛,脚踏实地
展开
-
变量的属性——C语言中的变量属性
变量的属性类比C语言变量的属性存储类作用域链接属性生命周期变量的属性类比(1)意思解释: 事物本身所固有的性质,是物质必然的、基本的、不可分离的特性,又是事物某个方面质的表现。 (2)理解: 属性可以理解为一个人的性格,我们说这个人很和蔼,那么和蔼就是这个人的“属性”。 (3)推论: 我们也可以给变量定义一个...原创 2018-06-04 08:59:23 · 5083 阅读 · 0 评论 -
预编译处理——宏定义与使用分析
C语言中的宏定义定义宏常量宏定义表达式宏表达式与函数的对比宏与作用域强大的内置宏C语言中的宏定义#define是预处理器处理的单元实体之一#define定义的宏可以出现在程序的任意位置#define定义之后的代码都可以使用这个宏定义宏常量#define定义的宏常量可以直接使用#define定义的宏常量本质为字面量示例代码:宏定...原创 2018-06-05 08:29:13 · 1884 阅读 · 0 评论 -
预编译处理——条件编译分析
基本概念#include的本质条件编译的意义基本概念条件编译的行为类似于C语言中的if…else…条件编译时预编译指示命令,用于控制是否编译某段代码示例代码:条件编译初探// #include <stdio.h>#define C 1int main(){ const char* s ; #if( C =...原创 2018-06-05 08:31:06 · 847 阅读 · 0 评论 -
预编译处理——#和##操作符的使用分析
#运算符:利用宏参数创建字符串##运算符:预处理器的粘合剂#运算符:利用宏参数创建字符串# 运算符用于在预处理期将宏参数转换为字符串# 的转换作用是在预处理期完成的,因此只在宏定义中有效编译器不知道 # 的转换作用用法 #define STRING(x) #x printf("%s\n", STRING(Hello World!));示例代码...原创 2018-06-05 08:32:50 · 1809 阅读 · 0 评论 -
预编译处理——error和#line
error的用法#ifndef _cplusplus#line的用法error的用法#error用于生成一个编译错误消息用法 #error message message不需要用双引号包围 #error编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning用于生成编译警告。#error是一种与编译器...原创 2018-06-06 19:36:41 · 1061 阅读 · 0 评论 -
预编译处理——#pragma使用分析:结构体内存对齐
#pragma简介#pragma message#pragma once#pragma pack什么是内存对齐?为什么需要内存对齐?如何进行内存对齐?内存对齐到底是如何计算的呢?#pragma简介#pragma用于指示编译器完成一些特定的动作#pragma所定义的很多指示字都是编译器特有的#pragma在不同的编译器间是不可移植的预处理器将忽...原创 2018-06-06 20:38:07 · 1022 阅读 · 1 评论 -
指针的本质分析
*号的意义&号的意义传值调用与传址调用常量与指针 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?*号的意义通过一个指针访问它所指向的地址的过程称为间接访问或借引用指针。这个用于指向间接访问的操作符是单目操作符 * 1. 在指针声明时,* 号表示所声明的变量为指针。 2. 在指针使用时,* ...原创 2018-06-06 23:12:55 · 1783 阅读 · 0 评论 -
数组的本质分析
数组的概念数组的大小数组地址与数组名数组和指针并不相同数组的概念数组是相同类型的变量的有序集合数组的大小数组在一片连续的内存空间中存储元素数组元素的个数可以显示或隐式指定示例代码:数组的初始化#include <stdio.h>int main(){ int a[5] = {1, 2}; int b...原创 2018-06-06 23:14:59 · 777 阅读 · 0 评论 -
函数——函数参数的秘密
函数参数程序中的顺序点参数入栈顺序调用约定可变参数可变参数的限制函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值时函数调用时的实参值函数参数的求值顺序依赖于编译器的实现 问题:下面的程序输出什么?为什么?#include <stdio.h>int func(int i, int j)...原创 2018-06-06 23:17:20 · 444 阅读 · 0 评论 -
函数——函数与指针
函数类型函数指针回调函数回调机制原理函数类型C语言中的函数有自己特定的类型函数的类型由返回值,参数类型和参数个数共同决定int add(int i, int j)的类型为int(int,int)C语言中通过typedef为函数类型重命名typedef type name(parameter list)例: ...原创 2018-06-06 23:21:37 · 145 阅读 · 0 评论 -
函数——main函数与命令行
main函数的概念main函数的本质main函数的参数main函数参数的意义面试问题-main函数一定是程序执行的第一个函数吗?main函数的概念C语言中main函数成为主函数一个C程序是从main函数开始执行的在实际编程中,我们可以看到很多不同main函数的定义。 main(); void main(); int main(); ...原创 2018-06-06 23:22:35 · 1136 阅读 · 0 评论 -
操作符和表达式——逗号运算符
逗号表达式是C语言中的“粘贴剂”逗号表达式用于将多个子表达式连接为一个表达式逗号表达式的值为最后一个子表达式的值逗号表达式中的前N-1个子表达式可以没有返回值逗号表达式按照从左到右的顺序计算每个子表达式的值 exp1,exp2,exp3,…,expN示例代码:逗号表达式的示例#include <stdio.h>void hello (){ print...原创 2018-06-05 08:27:12 · 414 阅读 · 0 评论 -
操作符和表达式——三目运算符
三目运算符(a ?b :c)可以作为逻辑运算的载体 规则:当a的值为真时,返回b的值;否则返回c的值示例代码:三目运算符初探#include <stdio.h>int main(){ int a = 1; int b = 2; int c = 0; c = a < b ? a : b ; (a < b ...原创 2018-06-05 08:26:10 · 840 阅读 · 0 评论 -
操作符和表达式——++和--操作符
++,- -操作符的本质笔试面试中的“奇葩”题++,- -操作符的本质C语言中的一些“小动作” 高级语言在运算中允许我们大跨度的运算。意思就是低级语言中需要好几步才能完成的一个运算,在高级语言中只要一步就可以完成了。 譬如C语言中的++和–运算符,在C中我们需要一个变量 i+1,我们只要写i++即可,这看起来虽然只有一句代码。但是我们知道编译器还是会吧...原创 2018-06-05 08:25:28 · 1079 阅读 · 0 评论 -
变量的属性——存储类关键字
auto关键字register关键字static关键字extern关键字auto关键字auto关键字在C语言中只有一个作用,就是修饰局部变量auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上编译器默认所有的局部变量都是auto的。示例代码void func(){ int i; //局部变量默认...原创 2018-06-04 09:00:19 · 599 阅读 · 0 评论 -
变量的属性——类型限定符:const
const只读变量const的本质const与指针变量const修饰函数参数和返回值const只读变量const 修饰的变量是只读的,本质还是变量const 修饰的局部变量在栈上分配空间const 修饰的全局变量在全局数据区分配空间 4. const 只在编译器有用,在运行期无用const 修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋...原创 2018-06-04 09:01:53 · 451 阅读 · 0 评论 -
变量的属性——类型限定符:volatile
深藏不漏的volatilevolatile详解有三种情况是编译器编译时无法预知的深藏不漏的volatilevolatile可以理解为“编译器警告指示字”volatile告诉编译器必须每次去内存中取变量值volatile主要修饰可能被多个线程访问的变量volatile也可以修饰可能被未知因数更改的变量如:int obj = 0 ;int a ...原创 2018-06-04 09:02:57 · 755 阅读 · 0 评论 -
变量的属性——变量与数据类型
问题:为什么C语言需要变量和数据类型?在汇编语言中,存放数据是直接用内存地址存放的,这种赋值方法非常麻烦,特别是占用多个字节内存的数据。所以 C语言为了让我们更加方便的编程,设计出了数据类型和变量。示例代码:类型和变量的关系int main (){ char c = 0 ; short s = 0 ; int i = 0 ; printf ...原创 2018-06-04 09:04:02 · 2584 阅读 · 0 评论 -
变量的属性——unsigned和signed
计算机中的符号位有符号数的表示法无符号数的表示法当无符号数遇上有符号数 问题:C语言是如何表示一个数为负数和整数的?因此在C语言中,增加了两个关键字用于表示整数和负数。 1. signed表示未有符号的类型 2. unsigned则表示无符号类型 3. C语言中只有整数类型能够声明unsigned变量 4. C语言中变量默认为有符号类型计算机中...原创 2018-06-04 09:04:46 · 2596 阅读 · 2 评论 -
变量的属性——浮点数的秘密
内存中的浮点数浮点数存储示例10进制浮点数的内存表示浮点数的不精确表示浮点数的秘密 诸如3.14159和6.023x1023这样的数值无法按照整数存储。C语言为了存储这种数值,就有了float、double、long double浮点数类型。内存中的浮点数浮点数在内存的存储方式为:符号位、指数、尾数。float与double类型的数据在计算...原创 2018-06-04 09:06:16 · 414 阅读 · 0 评论 -
变量的属性——类型转换
类型之间的转换强制类型转换隐式类型转换隐式类型转换的发生点: 问题:当两种不同类型数据进行运算的时候?C语言该如何判断呢?C语言运行书写混合数据类型的表达式时,会自动进行类型转换(也可以我们自己强制类型转换),以使实际的计算只使用一种类型。类型之间的转换C语言中的数据类型可以进行转换 1. 强制类型转换 2. 隐式类型转换int ...原创 2018-06-04 09:07:35 · 699 阅读 · 0 评论 -
操作符与表达式——单引号和双引号
C语言中的单引号用来表示字符字面量 - ‘a’表示字符字面量,在内存中占1个字节。‘a’+1表示‘a’的ASCII码加1,结果为‘b’。C语言中的双引号用来表示字符串字面量 - “a”表示字符串字面量,在内存中占2个字节。“a”+1表示指针运算,结果指向“a”结束符‘\0’示例代码:单引号和双引号的本质#include <stdio.h>int main(){...原创 2018-06-05 08:22:26 · 2592 阅读 · 0 评论 -
操作符和表达式——逻辑运算符
2.逻辑运算符@(笔记本)[计算机语言学习, C语言, 2.操作符和表达式] 逻辑运算符&& ,||和!真的很简单吗?只是单纯的判断真 &&真= 真、真||假 =真吗?下面我们看一个程序,分析一下逻辑运算符还有没有一些不为人知的秘密! 示例代码:初探逻辑运算符#include <stdio.h>int main (){...原创 2018-06-05 08:23:40 · 488 阅读 · 0 评论 -
操作符和表达式——位运算符分析
位与&位或|位取反~位异或^左移<< 和 右移>>移位运算符的问题C语言中的位运算符 位运算符直接对bit位进行操作,其效率最高位与&注意:位与符号是一个&,两个&&是逻辑与。 1.位与操作的特点,只有1和1位与结果为1,其余全是0。 2.位与和逻辑与的区别:位与两个操作数按照二进制位...原创 2018-06-05 08:24:47 · 743 阅读 · 0 评论 -
C语言的内存管理——动态内存分配
本文来自狄泰软件学院——《C语言深度剖析课程》动态内存分配的意义malloc和freecalloc和relloc动态内存分配的意义C语言中的一切操作都是基于内存的变量和数组都是内存的别名内存分配由编译器在编译期间决定定义数组的时候必须指定数组长度数组长度是在编译器就必须确定的需求:程序运行的过程中,可能需要使用一些额外的内存空间mall...原创 2018-06-07 09:12:15 · 494 阅读 · 0 评论