IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 我的C学习笔记[希望大家多多指点] -> 正文阅读

[C++知识库]我的C学习笔记[希望大家多多指点]

函数定义可以任何次序出现在一个或多个源文件中,但同一函数不可以分割在多个文件中;

对于主函数main而言,return返回值为0表示正常终止,非0则表示非正常终止【出现异常或出错结束程序】

Void显式说明该函数不返回任何值

从技术角度来看,地址就是指向变量的指针

在c中,人们通常把变量和函数的extern声明放在一个单独的文件中,习惯上称之为头文件【.h】

C中,被调用函数不能直接修改主调函数的值,只能修改其私有临时副本的值;

ASCII码表:字母(包括大写)以及一些常用的符号没法表示,因此约定一套编码来表示这些符号;

计算机在存储数据和执行指令的时候是以8个比特(bit)为单位的,也就是1个字节(byte),

bit(比特),即 存放一个1或者0的空间。

sizeof操作符来计算不同数据类型在内存中所占空间的大小,单位是字节(byte);

不同的数据类型有不同的输出格式

%d - 打印整形

%c - 打印字符

%f - 打印浮点型 - 小数

%p - 以地址形式打印

%x - 打印16进制数字

%s - 打印字符串

全局变量:定义在代码块{}之外的变量;

局部变量:定义在代码块{}之内的变量;

全局变量与局部变量名相同,局部变量优先。

作用域:限定这个名字的可用性的代码范围就是这个名字的作用域;

1、局部变量的作用域是变量所在的局部范围。

2、全局变量的作用域是整个工程。

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段;

1、局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2、全局变量的生命周期是:整个程序的生命周期。

常量类型:1.字面常量【程序中出现的数字,字符等,10 和 w 就是字面常量。】

????????????? ? 2.const修饰的常变量【const修饰的常变量无法修改】

????????? 3.#define定义标识符常量【define定义的常量不能被修改,这种定义方式相当于给字面常量起别名,它的别名具有字面常量的属性,在使用时别名直接替换为字面常量

e.g. #define name stuff这里的name在代码中就可以完全替代后面的stuff。***define定义标识符常量如果要换行的话千万不能用空格换行,必须用续航符' \ '来换行,并且注意,不能在续航符后面加空格,在define定义标识符的时候,建议不要加上分号.】

????????? 4.枚举常量【通过枚举关键字enum定义的常量。一般形式为:

enum名{枚举元素1,枚举元素}】

字符串:由双引号引起来的一串字符称为字符串字面值【单个字符只用单引号括起来】,或者简称字符串。注:字符串相当于多个字符连续存放在字符数组中,但是字符串的结尾是一个隐藏的\0 转义字符。在计算字符串长度的时候\0 是结束标志,不算作字符串内容,\0对于字符串非常重要,在打印字符串时,\0可以使打印停止。当字符数组的大小比我们存入数组的字符串大时,多出的空间会全部补为\0。【高中生物编译中终止子】

转义字符

?

常见关键字

  1. typedef 顾名思义是类型定义,这里应该理解为类型重命名。

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名

typedef unsigned int uint_32;

2. 在C语言中:?static是用来修饰变量和函数的;

?

?1、修饰局部变量-静态局部变量;【static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束, 生命周期才结束】

?2、修饰全局变量-静态全局变量;【一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。】

?3、修饰函数-静态函数;【一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。】

***源文件其实就是纯文本文件,它的内部并没有特殊格式,源文件后缀大都根据编程语言本身的名字来命名。

#define 定义常量和宏

#defne 宏名(被替换的内容)(要替换的内容)

Eg.#define ADD(x,y) ((x)+(y))

指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节(byte)。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

1.地址的取出

变量都有地址, &操作符可以将变量的地址取出,然后赋值给指针

#include <stdio.h>

int main()

{

??? int num = 10;

??? &num;//取出num的地址

??? //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)

??? printf("%p\n", &num);//打印地址,%p是以地址的形式打印

??? return 0;

}

  1. 地址的存储

需要定义指针变量【也有地址】

#include <stdio.h>

int main()

{

??? int num = 10;

??? int* p = &num;

??? *p = 20;??????? //*是解引用操作符,*p是通过p找到p指向的对象,即num

??? return 0;

}

总结如下:

我们取出一个变量的地址的时候,这个地址便称为?指针;

?而这个地址如果要存起来的话,需要存到一个变量里面去,这个变量就被称为?指针变量;

指针变量可以对它进行?解引用【解引用是指:通过指针,找到对应的内存和内存中的数据。】?操作;指针是一个变量,用来存放地址;指针大小在32位平台是4个字节,64位平台是8个字节。

//关于*的特别说明

*在C/C++中还有一个名字就是“解引用”,但需要注意的是,在变量声明的时候,*不能当做解引用使用,只是表示你声明的变量是一个指针类型。Eg. *p=5;//这就是解引用,*解释了 p对常量 5的内存地址的引用,解释结果就是直接去寻找p所指内容,因为p指向a,所以a的内容将被修改为5,而不是50。

//关于&的特别说明

& 在C/C++中具体 3种语义, 按位与,取地址 和声明一个引用。

int a=0x0000002 & 0x00000003;//按位与

int *p=&a;//取地址,取出a在内存中的地址给p,这样就建立一个指针映射,使得p指a

int &a=b;//声明a是b的引用,对a操作修改也就是直接对b修改。

在指针操作中,&还有一种叫法叫做“脱去解引用”在这个表达式中&*p(假设p是指针),&脱去了*对p的解引用,从而得到抵消的效果,得到应该是p所指的变量的地址。

结构体

结构体使得C语言有能力描述复杂类型结构体,它就将不同类型的数据存放在一起,作为一个整体进行处理。结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。[在C语言中,结构体不能包含函数。!!!]

//声明一个结构体

struct book

{

char title[MAXTITL];//一个字符串表示的titile 题目 ;

char author[MAXAUTL];//一个字符串表示的author作者 ;

float value;//一个浮点型表示的value价格;

};//注意分号不能少,这也相当于一条语句;

//我们有时候也将结构体声明叫做模板,因为它勾勒出数据该如何存储,并没有实例化数据对象。

C语言结构体定义的三种方式

  1. 最标准的方式:

#include <stdio.h>

struct student //结构体类型的说明与定义分开。声明

{

int age;? /*年龄*/

float score; /*分数*/

char sex;?? /*性别*/

};

int main ()

{

struct student a={ 20,79,'f'}; //定义

printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );

return 0;

2.不环保的方式[最不环保的方式,是可以使用多次的]

#include <stdio.h>

struct student /*声明时直接定义*/

{

int age;? /*年龄*/

float score;? /*分数*/

char sex;?? /*性别*/

/*这种方式不环保,只能用一次*/

} a={21,80,'n'};

int main ()

{

printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );

  1. 最奈何人的方式

#include <stdio.h>

struct?? //直接定义结构体变量,没有结构体类型名。这种方式最烂

{

int age;

float score;

char sex;

} t={21,79,'f'};

int main ()

{

printf("年龄:%d 分数:%f 性别:%c\n", t.age, t.score, t.sex);

return 0;

}

return 0;

}

}

EXTERN

  • 引用同一个文件中的变量

#include<stdio.h>

int func();

int main()

{

??? func(); //1

??? extern int num;

??? printf("%d",num); //2

??? return 0;

}

int num = 3;

int func()

{

??? printf("%d\n",num);

}

二、引用另一个文件中的变量[extern这个关键字的真正的作用是引用不在同一个文件中的变量或者函数。extern关键字只需要指明类型和变量名就行了,不能再重新赋值,初始化需要在原文件所在处进行,如果不进行初始化的话,全局变量会被编译器自动初始化为0,只有当一个变量是一个全局变量时,extern变量才会起作用.]

#include<stdio.h>

int main()

{

??? extern const int num;

??? printf("%d",num);

??? return 0;

}

#include<stdio.h>

const int num=5;

void func()

{

??? printf("fun in a.c");

}

  1. 引用另一个文件中的函数

#include<stdio.h>

int main()

{

??? extern void func();

??? func();

??? return 0;

}

#include<stdio.h>

const int num=5;

void func()

{

??? printf("fun in a.c");

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:05:50  更:2022-02-24 15:06:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:43:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码