搜狐网站建设设计,wordpress 调用描述,做鲜花配送网站需要准备什么,广告标识标牌制作厂家本篇博客是对C的一些简单知识分享#xff0c;有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念#xff1a;2.C发展历程3.C如何学#xff1f; 二、C入门1.C关键字(C98标准)2.命名空间3.C输入输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参… 本篇博客是对C的一些简单知识分享有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念2.C发展历程3.C如何学 二、C入门1.C关键字(C98标准)2.命名空间3.C输入输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参数①概念说明②使用规则③应用举例④缺省参数的意义 5.函数重载①概念 6.引用①概念②特性使用场景1.做参数 一、C前言
1.C的概念
一种高级编程语言由C发展而来满足过程化程序设计、基于对象的程序设计、面向对象的程序设计。
2.C发展历程 C最新发展LINK
3.C如何学
写博客总结定期画思维导图总结常复习(博客笔记、知乎答案、看书)刷题
二、C入门
1.C关键字(C98标准) 2.命名空间
C命名空间概念一种命名域、是C专门用来解决C语言变量命名冲突问题而产生的。 命名空间的意义很大程度上解决C变量命名冲突问题。 知识拓展C中的命名冲突 命名冲突主要有两大类 程序员 与 库 程序员 与 程序员 知识拓展1域C上指的是作用域LINK 在C中大体有四种域 全局域生命周期 访问局部域生命周期 访问命名空间域访问类域 知识拓展2编译器对名称的搜索原则 在不指定域的情况下 当前域全局域 在指定域的情况下 直接去指定域搜索 命名空间的定义 namespace关键字命名空间的名字{…}
命名空间中可以定义变量/函数/类型命名空间可以嵌套同一命名空间会被合并
namespace bit
{// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}
注意一个命名空间就定义了一个新的作用域命名空间中的所有内容都局限于该命名空间中命名空间的使用
法1指定访问 需要用到访问操作符 访问变量/函数 命名空间名称 :: 变量名/函数名访问结构体 struct 空间名 :: 结构体名
法2直接访问(展开访问) 需要用到指令using namespace 空间名 —等价于把空间内的命名放到全局变量 法3展开特定项 eg:using std::cout; 总结对比指定访问与展开访问分析其利弊 答 指定访问 解决变量冲突问题 麻烦展开访问 直接把变量放到全局中 方便部分展开 把常用的变量放到全局中 方便 其中做项目一般使用第1与第3方式第2种方法一般在练习中使用。 头文件展开与命名空间展开的区别 头文件的展开本质是在预处理阶段拷贝头文件内容。 命名空间的展开本质是影响编译器的搜索规则。
3.C输入输出
①概念说明
cpp的输入输出分别是cout与cin这两个函数均包含在iostream头文件中在使用时需要展开命名空间进行使用。
②使用说明
#includeiostream
using namespace std;int main()
{// ,1.左移int a 10;a a 1;printf(a1:%d\n, a);// ,2.流插入cout hello cpp endl;// ,1.右移a a 1;printf(a1:%d\n, a);// .2.流提取cin a;return 0;
}③特征说明
下面是cout的特征说明示例cin也是同理
④细节拓展 ⑤cout与cin的意义
弥补了C语言自定义类型输入输出麻烦的问题
4.缺省参数
①概念说明
缺省参数是c提供的一种在函数缺少传入值的情况下使用默认值的一种参数。
缺省参数分为两类 全缺省参数 半缺省参数
②使用规则
有实参优先使用没有实参使用默认参数 缺省参数函数传实参时候从左到右依次给值缺省参数函数形参从右向左依次给默认值缺省参数不能在声明与定义中同时出现要优先给函数声明使用缺省 缺省值必须是常量值或者全局变量 思考为什么缺省参数要优先在函数声明中使用而不是优先给函数定义使用 答 我们首先要明白编译器的编译原理编译器首先要进行预处理在这一步中展开头文件之后编译器要进行编译在这一步中编译器主要是检查语法通常情况下这种时候每个源文件都是独立的每个调用函数的源文件中也自然大概率没有函数的定义但是已经有了函数声明(因为经过了预处理)所以为了要让编译器不报错肯定是先让函数声明有缺省参数。 那为什么不直接函数定义也有缺省参数函数声明也有缺省参数呢 因为语法是规定只能有一个的。 ③应用举例
在c语言阶段我们设计一个栈时候往往初始化不知道要给几个空间这样我们可以给一个缺省参数来默认给值然后不够了的话扩容。
④缺省参数的意义
对函数定义更加灵活化。
5.函数重载
①概念
函数名相同函数参数不同称为函数重载 函数参数不同在哪里 参数的类型不同 参数的个数不同 参数的顺序不同 思考编译器是如何支持函数重载的C语言就不行。 答名称修饰 6.引用
①概念
引用底层汇编层面是用指针实现的但是在语法层面上是为变量起别名与指针起到互补作用。
②特性 引用在定义时必须初始化 引用不能更改指向 一个变量可以有多个引用 思考引用可以完全替代指针吗 答不能引用往往是在用指针比较复杂的地方代替指针。 为什么引用不能完全替代指针 虽然引用可以在大多数情况下替代指针的使用从而简化指针但是某些情况下是不能用引用解决的。 比如下面这个例子 现在有一个单链表要求删除中间的一个结点。 这里的关键点就在于引用不能改变指向现在你把中间结点删除了但是前面结点的指向怎么办 //例子链表
typedef int SLTDataType;
typedef struct SListNode
{SLTDataType val;struct SListNode* next;
}SLNode, * PSLNode;//指针的方法
void SLPush(SLNode** pphead, SLTDataType x)
{assert(pphead);SLNode* newnode (SLNode*)malloc(sizeof(SLNode));newnode-next NULL;newnode-val x;if (*pphead NULL){*pphead newnode;return;}else{SLNode* pcur *pphead;while (pcur-next){pcur pcur-next;}pcur-next newnode;}
}//引用的方法
void SLPush(SLNode* pphead , SLTDataType x)
{assert(pphead);SLNode* newnode (SLNode*)malloc(sizeof(SLNode));newnode-next NULL;newnode-val x;if (pphead NULL){pphead newnode;return;}else{SLNode* pcur pphead;while (pcur-next){pcur pcur-next;}pcur-next newnode;}
}void SLPrint(SLNode* phead)
{while (phead){cout phead-val ;phead phead-next;}
}void test_3()
{SLNode* phead NULL;SLPush(phead, 1);SLPush(phead, 2);SLPush(phead, 3);SLPush(phead, 4);SLPrint(phead);
}使用场景
1.做参数
void C_Swap(int* a,int* b)
{int temp *a;*a *b;*b temp;
}void CPP_Swap(int a2, int b2)//在这里可以起与实参一样的名字吗可以。因为属于不同的域。
{int temp a;a b;b temp;
}void test_1()
{int a1 10;int b1 20;printf(a1 %d , b1 %d\n, a1, b1);C_Swap(a1,b1);printf(a1 %d , b1 %d\n, a1, b1);int a2 10;int b2 20;cout a2 a2 b2 b2 endl;CPP_Swap(a2, b2);cout a2 a2 b2 b2 endl;
}思考在这里可以起与实参一样的名字吗 答可以因为属于不同的域。 待续。