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语言基础语法整理

3.2.1 常量和变量

常量

C语言常量分为直接常量符号常量两种。

直接常量

直接常量又分为整型常量,实型常量,字符型常量和字符串常量。

1.整型常量

85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* 整数 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */

2.实型常量
实数 浮点数
(1)小数形式:
(2)指数形式:±尾数E指数。

3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数  字母E或e的前后必须有数字 */
210f          /* 非法的:没有小数或指数  小数点不可以省略*/
.e55          /* 非法的:缺少整数或分数 字母E或e的前后必须有数字*/

3.字符型常量
用英文单引号括起来,只保存一个字符’a’、‘b’ 、‘*’ ,还有转义字符 ‘\n’ 、‘\t’。

4.字符串常量
用英文的双引号引起来 可以保存多个字符。

"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"			//这三种形式所显示的字符串是相同的。

内存中占用一段连续的存储单元,系统自动在字符串的尾部加上’\0’作为字符串的结束标志,因此,n个字符组成的字符串,在内存中占用n+1个字节空间可以使用sizeof运算符来计算字符串占用的内存空间大小。

字符串的长度等于该字符串中所包含的有效字符个数.如" Hello World"的长度为10.转义字符可以作为一个字符,如:“Hello World\t"的长度为11。strlen()函数来计算字符串长度。

字符常量和字符串常量在内存中的存储情况是不同的,如‘6’在内存中占1个字节,存储的是ASCII码,而”6“在内存中占2个字节,一个字节存储‘6’,另一个字节存储‘\0’。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予给一个字符常量,在C语言中,由于没有提供字符串类型的变量,字符串一般用字符数组来解决。

符号常量

#define 标识符 常量值
符号常量不占内存 习惯上用大写标识符

变量

常变量(c99)

const int Max=100; 

符号常量不占用内存空间,在预编译时就全部由符号常量的值替换了;而常变量占用内存空间,此变量在存在期间不能重新赋值。
在对象名前使用const声明常对象,但声明时必须同时进行初始化,而且不能被更新。

标识符

参见文章:C语言编程规范 — 标识符的命名规则

3.2.2 数据类型

1 基本类型:
算术类型,包括两种类型:整数类型和浮点类型。
2 枚举类型:(enum)
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3 void 类型:
类型说明符 void 表明没有可用的值。
4 派生类型:
它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。

详细内容查看链接:C语言数据类型

第7章 函数

7.4 函数声明

参见链接:函数声明应该写在什么位置?main函数里面还是前面?

7.7 数组作函数参数

数组元素做函数实参,不能做形参。

传递的数组元素的

一维数组作函数参数,数组名做函数实参和形参。

传递的是数组首元素的地址。所以数组名做函数实参,形参必须是对应的数组名或是指针变量

void fun1(char *a,int length);  //数组名 形参一维数组的声明中可以写元素个数length,也可以不写。
void fun2(char a[],int length);  //数组名  a[]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理
void fun3(char a[10],int length);   //数组名

//调用时
fun1(array,n);

数组首地址传给被调用的函数后,由于是地址传递,相当于形参实参的两个数组共用同一段内存单元,所以改变形参的值就会把实参的值改变掉。值传递是不会改变形参的值的,因为形参不会占用内存,只是临时的存储单元。

二维数组名作为实参和形参

在对形参数组声明时,必须指定列的大小,且应与实参的列大小相同
第一维的大小可以忽略,形参实参的一维大小可以不同。

int array[3][10];  //形参数组的两个维都指定    
int array[][10];  //第一维大小省略  二者都合法而且等价,但是不能把第二维的大小省略。
/* 下面写法不合法 */
int array[][];  	//不能确定数组的每一行有多少列元素 
int array[3][];  	//不指定列数就无法确定数组的结构

7.8 局部变量和全局变量

局部变量优先原则:当局部变量与全局变量同名时,在该函数或者复合语句内,局部变量优先于全局变量。

建议多使用局部变量,因为局部与全局的内存存储方式不同,全局变量存储在全局数据区中,局部变量存储在栈区。局部变量仅仅在使用时才会开辟存储单元,随函数的退出或循环退出就不存在了,而全局变量的生命期和主程序一样,随程序的销毁而销毁。

其次,如果使用了全局变量,会降低程序的可靠性和移植性。违背了程序“高内聚,低耦合”的模块要求。一般要求把C语言的函数要做成一个封闭体,除了“实参—形参”的渠道与外界产生联系以外,没有其他渠道。

最后全局变量的使用会降低程序的清晰性和可阅读性,容易出错。

7.9 变量的存储方式和周期

在这里插入图片描述

1、auto 自动变量

int f(int a)
{
	auto int b,c=3; /*定义b,c自动变量*/
}

执行完f函数后,自动释放a,b,c所占的存储单元。关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。
作用域:函数内

2、register 寄存器变量
将变量存在寄存器中,减少访问内存的次数,提高效率。但现在的编译器优化到自动将变量存放在寄存器中了,不需要程序员来指定,所以平时使用性不大。
作用域:函数内,但是会保留变量值。

3、extern 外部变量 [声明]
1)在一个文件中扩展外部变量的作用域;

#include <stdio.h>
int main(){
	extern int a;		//不加extern关键字时a=0  是声明,不是定义
	printf("a = %d",a);
}
int a = 520;		//定义

2)扩展外部变量的作用域到其他文件;
file2.c中定义了变量aint a = 520;,在file1.c中使用变量a:

#include <stdio.h>
extern a;
int main(){
    printf("a = %d\n",a);
    return 0;
}

作用域:函数内+函数外,变量值保留,随程序结束再释放。

4、static 静态变量
1) 对局部变量使用static关键字,会保留住变量的值,将其存储在静态存储区,不会随当前函数结束而释放内存单元。
2) 对全局变量使用static关键字,该变量的作用域只存在于当前文件模块。

7.10 内部函数和外部函数

内部函数:只能被本文件中其他函数调用,在函数名和函数类型的前面加上 static

//第一个文件
#include<stdio.h>
void show()
{
	printf("%s \n","first.c");
}
//第二个文件
#include<stdio.h>
static void show()
{
	printf("%s \n","second.c");
}
void main()
{        
	show();
}

运行结果:second.c

外部函数:需要调用其他源文件中的函数,调用外部函数之前,需要在当前源文件中定义外部函数,添加extern关键字。

//第一个源文件
int add(int x,int y)
{
	return x+y;
}
//第二个源文件
#include <stdio.h>
extern int add(int x,int y);
void main()
{        
	printf("sum=%d\n",add(1,2));
}

第8章 指针

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:38:18  更:2022-09-24 20:41:26 
 
开发: 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年5日历 -2024/5/19 15:16:52-

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