| |
|
开发:
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。【高中生物编译中终止子】 转义字符 ? 常见关键字
//将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的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址) ??? printf("%p\n", &num);//打印地址,%p是以地址的形式打印 ??? return 0; }
需要定义指针变量【也有地址】 #include <stdio.h>int main() { ??? int num = 10; ??? int* p = # ??? *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语言结构体定义的三种方式
#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 );
#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"); }
#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语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |