展开

关键词

C经典

如果重新进行C的学习,那么要学很久才能够系统地认识。本文则将比较容易想不起来的知识点进行简单的整理。    1、#ifdef 和 #ifndef   #ifdef 标识符A// 如果标识符A定义了,就序段1,否则序段2   序段1   #else   序段2   #endif   #ifndef 的功能则与 #ifdef相反,是没有定义标识符A的时候序段1。    #ifdef STM32F10X_HD   大容量芯片需要的一些变量定义   #end   3、extern变量申明   C中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中 C视频资料 http://www.makeru.com.cn/course/details/2233?s=45051

61310

C

stdio.h> #include <stdlib.h> typedef struct test{ char a: 4; char b: 1; char c: stdio.h> #include <stdlib.h> typedef struct test{ char a: 4; char b: 1; int c: 对位制,不能把设置的位数长度大于类型的长度,比如 typedef struct test{ char a: 10; char b: 1; char c: 8; } test; 这里10已经超过了char类型的长度,所有译错误。 stdio.h> #include <stdlib.h> typedef struct test{ char a: 8; char b: 1; char c:

37570
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C的东西你知道吗?C学档

    C是结构化 每个c序及其句必须采用特定结构。每个c序都有以下一般结构...... 第1行:注释 - 译器忽略它们 本节用于提供序的小描述。 我们可以在序中写任意数量的多行注释。 在C序中,注释行是可选的。根据要求,我们写注释。C序中的所有注释行仅提供了解序及其代码的指导原则。 我们使用#include句将头文件包含到我们的序中。我们使用#define句来定义一个常量。根据要求使用预处理句。如果我们不需要任何头文件,那么就不需要写#include句。 第4行:int main() 每个C序都必须写此句。该句(main)指定C序执行的起始点。这里,main是一个用户定义的方法,它告诉译器这是序执行的起点。 裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课 任何C序的一般规则 每个可执行句必须以分号符号(;)结尾。 每个C序必须包含一个主要方法(序执行的起始点)。

    33730

    C类型转换

    我们在序的时候,经常会出现不同类型的数据之间需要计算、赋值,必然会出现类型转换问题。C的变量数据类型是可以转换的,转换的方法有两类,一种是自动转换,一种是强制转换。 自动转换 这种转换发生在不同数据类型的量混合运算或赋值时,由译系统自动完成。自动转换遵循以下规则: 1,若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

    746130

    C之指针二

    指针和数组 C的数组表示一段连续的内存空间,用来存储多个特定类型的对象。与之相反,指针用来存储单个内存地址。数组和指针不是同一种结构因此不可以互相转换。

    54140

    C循环句解析

    其实不只是C有循环句,几乎所有都有循环句,大家可以想象要做同样一件事情十万次,要是没有循环会多么痛苦! C可以构成循环句的有如下几种: 1、goto句和if句组成; 2、while句; 3、do while句; 4、for句; goto-if循环句 goto和if组成的句最为灵活 在写一个任务函数时会常常用这种形式的while循环,比如某一个永久执行的线函数体可能有如下的形式: while (1) { ... } 用while改写上面的求和代码如下: int i = ; 这种循环跟上面本一样,唯一的差别就是首先无条件的先执行一次循环体后再判断逻辑表达式的值,然后根据这个值决定是否继续循环体,真则继续,假则不再循环,接着执行后面的句。 C的循环句一共就这些,相信把每一个都仔细理解了,还是比较好掌握。

    57450

    -寄存器

    7840

    C常见宏定义

    我们在使用C序的时候,常常会使用到宏定义以及宏译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C宏定义以及宏指令你都清楚呢? ,当前条件为真,则译下面代码,其实就是else if的简写 #endif 结束一个#if……#else条件译块 #error 停止译并显示错误信息 #warning 预处理序把出现在##两侧的参数合并成一个符号。 __FILE__ 包含当前序文件名的字符串 __LINE__ 表示当前行号的整数 __DATE__ 包含当前日期的字符串 __STDC__ 如果译器遵循ANSI C标准,它就是个非零值 __TIME__ 包含当前时间的字符串 另外在GCC下面,还有如下的宏定义: __FUNCTION__ 表示当前的函数名 __VA_ARGS__ 表示可变参数输入

    60680

    C逻辑运算符

    C关系运算符和逻辑运算符几乎无所不在,比如在循环句、分支句、逻辑判断等句块中都会出现。学好这部分对学好C具有重要作用。 C中有一共有如下6中关系运算符: < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 两边相等 ! 比如: 5 > 3 结果为真 5 >= 5 结果为真 5 < 3 为假 5 <= 5 为真 3 + 2 > 4 为真 C中的逻辑运算符一共有三种: && 逻辑与( C规定,数字运算时,0为假,而非0为真。 注意,逻辑运算&&中,只要前面的运算后假,后面的运算就不会在计算了。 比如有下面的代码段: int a = 1, b = 2; if ((a > b) && GetVal()) { ... } 这个代码中,由于逻辑与&&前面的(a > b)这个已经不满足了,序就不会再去执行后面的

    76760

    【视频】C六、函数

    来源:互联网 ?

    37050

    【视频】C七、数组

    来源:互联网 ? ----

    30890

    适合具备 C C++ (十)

    在上一则中,叙述了抽象类以及动态链接库的相关内容,本节来叙述一下抽象类界面的相关内容,以及本节即将引入一个新的概念,模板。 抽象类界面 何为抽象类界面呢? 要说清楚这个概念,需要回顾上一则中所述的类和应用两个概念,为了实现应用和类,引入了动态链接库的概念,要达到的效果就是当更改类的代码的时候,而不更改应用序的代码的时候,只需要重新生成动态链接库 ,如果只译动态链接库,而不译应用序,那么必然会导致序出现问题。 模板 在C++中的模板定义中,模板有两类,一个是函数模板,一个是类模板,在本节的中,主要是讲述函数模板的相关内容。 ,一般写在头文件中; 序的时候,译器根据函数的参数来“推导”模板的参数;然后生成具体的模板函数 模板函数参数推导过 模板函数参数的推导过是一个重要的内容,它主要可以分为如下几个方面: 有限的类型转换

    6920

    适合具备 C C++ (九)

    在上一则中,叙述了关于C++类型转换的相关内容,在本节中,将叙述 C++的另一个内容,也就是抽象,这也是 C++相对于 C来说独特的一点,下面我们就来着重叙述这一点。 多文件 在前面的中,有一则说到了多文件,在 C++中也就是将类的声明放到头文件中,将类的实现放在.cpp文件中,为了更好地阐述这种方法,我们用实例来进行讲解,首先,来看一下,所涉及到地所有文件有哪些 : rm -f *.o Human 上述代码就不再这里赘述了,跟之前中的 Makefile本是一样的,有了Makefile之后,译代码只需要使用 make命令就行了,译结果如下所示 ,本会分为两类,一个是应用,一个是类,那么这两者的区别如下所示: 应用:使用类 类:提供类,比如说 Englishman,Chinese 于此,我们将之前的序更改为这种形式,分为应用和类于上述我们对应用和类的区别的阐述,我们可以知道在刚刚那个序,main.c就是应用,而Englishman.c,Chinese.c及Human.c就是类,而我们只需要更改 Makefile

    9520

    适合具备 C C++ (二)

    在上一则中,通过与 C 相比较引出了 C++ 的相关特性,其中就包括函数重载,引用,this 指针,以及在脱离 IDE C++ 序时,所要用到的 Makefile的相关法。 本节所要叙述的是 C++的另外两个重要的特性,也就是构造函数和析构函数的相关内容,这两部分内容也是有别于 c而存在的,也是 c++的一个重要特性。 具体的来看如下所示的代码,在刚才那段代码的上,我们添加一些打印信息,从而推断我们析构函数调用的位置: #include <iostream> #include <string.h> #include 自定义拷贝构造函数 我们根据在上述代码的上,修改得到我们自定义的拷贝构造函数如下: #include <iostream> #include <string.h> #include <unistd.h 对象的构造顺序 在上述代码的上,比如说我们存在如下几个实例化对象。

    10820

    适合具备 C C++ (七)

    在前面的中,阐述了继承的相关内容,其中就包括继承之后数据成员的访问控制以及多重继承,虚拟继承等内容,本节的内容即将阐述另外一个面向对象的特性:多态,多态是面向对象三大特性之一。 (e); test_eating(c); return 0; } 按照常规思路,在调用 test_eating()函数的时候,我们传入的实参不同,那么它就会调用不同实参所对应的成员函数 image-20210220103645630 可见代码的运行结果并不是如我们所想的一样,那这是为什么呢,这就要提到前面一则中所讲的派生类的空间分布,也正是因为这个原因,导致代码的运行结果如上图所示 ,进而调用虚函数 静态联和动态联也存在着区别,静态联效率高,动态联支持多态。 简而之,也就是说一个类里有虚函数,那么这个类的实例化对象中必然存在指针,指针指向虚函数表,通过指针指向的虚函数表调用虚函数,下面是这个过的一个示意图: ?

    12410

    适合具备 C C++ (八)

    在前一则中,我们阐述了多态的相关概念,其中就包括实现多态所必须的虚函数,以及使用多态这个性质时一些限制的内容,本节将着重讲解 C++中的类型转换问题,其中就包括:dynamic_cast、 C的类型转换 隐式类型转换 我们在使用C进行的时候,时常会涉及到类型转换的问题,我们首先就隐式的类型转换进行阐述,话不多说,我们来看一段代码: #include <stdio.h> int C++ 的类型转换 本节的核心内容还是讲解 C++的,上述中的 C部分是为了引出C++的强制转换,在上述中,我们提及了 C的隐式转换和强制转换,实际上在 C++中也有与之对应的内容,在 C++中跟强制转换效果一样的便是 image-20210220205252531 译之后,如上图所示,出现了两个错误,这个错误也是刚刚在 C译时警告所提及的,就是因为当前的操作系统是 64位的,而char *和int *是8个字节 ,也就是能够区分出来当前是英国人还是中国人,按照之前C的习惯,我们自然会想到增加一个type,然后不同的国籍,给type赋不同的值,然后根据数值来判断当前是中国人还是英国人,这是一个比较拙劣的方法

    11320

    适合具备 C C++ (五)

    在上述中,我们已经完成了 C++相对于 C来说独特的法部分,在接下来的中,我们将叙述 C++中面向对象的法特性。 我们在学习面向对象的这种方法的时候,常常会听到这三个词,封装、继承、派生,这也是面向对象的三大特性,在本节我们将依次阐述封装、继承、派生的具体用法,在这里,我们先叙述的是封装这个属性的的相关内容 image-20210209204824118 那么上图所示的抽象出数据成员以及成员函数具体的含义是什么呢,正如前面所述,在前面的里,我们选用一个 Person类来作为例子进行讲解,其中这个类里我们有 在上述代码的上,我们增加如下所示的代码: /* 注意是在上述代码的上 */ class Student : public Person { }; int main(int argc, char 在序里面也是同样的道理,我们在上述代码的上进行更改,Father类不变,改变 Son类。

    7620

    适合具备 C C++ (六)

    在上一则中,着重讲述了派生类继承于父类之后的一些访问控制,在本次中,将介绍如下几个点:派生类扩展父类功能,派生类的空间分布,以及多重继承的相关概念。 : void test_func(Person &p) { p.printInfo(); } 于上述代码的上,我们继续来写主函数代码: int main(int argc, char : class Sofabed : public Sofa, public Bed { }; 既然是从两个类中继承而来,自然也就满足在之前的里所述的访问控制的原则,并为继承所得到的派生类也满足类所具备的一些特性 再论构造函数的调用顺序 在前面的中,已经多次提及了构造函数的执行顺序,接下来也有必要就此问题继续谈一下当存在多重继承时,以及存在虚拟继承时,这个时候构造函数的调用顺序又是怎么样的? public: Sofabed() { cout <<"Sofabed()"<<endl; } }; 在上述上,我们继续来实现LeftRightCom类以及 Data类和Type类: class

    10110

    适合具备 C C++ (四)

    在上一则中,我们讲述了重载运算符中前 ++和后++的重载函数的实现,阐述了在 C++中可以将运算符进行重载的方法,这种方法大大地便利了序员写代码,在接下来地叙述中,我们将着重讲述运算符重载时地一些更为细致地内容 紧接着,我们知道我们在使用 C++进行码的时候,本不会再采用 C中的法 printf这个句,随之替代的是 cout这个句,我们也知道我们使用 cout进行输出的时候,往往采用的是下面这样的输出方式 << "work =" << work << endl; } 总结一下也就是说:const对象只能够调用const成员函数,而const表示的是此函数没有对当前对象进行修改 小结 上述就是本期<em>教</em><em>程</em>分享的内容 ,到本期<em>教</em><em>程</em>截至,<em>C</em>++相对于 <em>C</em><em>语</em><em>言</em>不同的一些<em>语</em>法特性就到此结束了。 下期<em>教</em><em>程</em>将介绍 <em>C</em>++如何实现面向对象的方法。本期<em>教</em><em>程</em>所涉及到的代码可以通过百度云链接的方式获取到。

    6520

    相关产品

    • 云服务器

      云服务器

      云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券