标签:point 寄存器变量 tab ios 引用 预处理 只读 c程序 agg
C语言 | C++ |
---|---|
基于过程:程序=算法+数据结构 | 面向对象并基于过程 |
C语言要求变量的定义应该放在所有的执行语句之前 | C++只需要在第一次使用该变量之前进行定义即可 |
C语言中,输入和输出的功能是通过调用scanf函数和printf函数来实现的,输入和输出单个字符的函数:getchar和putchar | C++中是通过调用输入输出流库中的流对象cin和cout实现的,同时也依旧支持C语言中的输入输出 |
C语言没有提供逻辑型数据 | C++中增加了逻辑型数据,逻辑常量只有两个:false和true |
C语言不支持内联函数、函数的重载、函数模板和有默认参数的函数 | C++中支持内联函数、函数的重载、函数模板和有默认参数的函数 |
C语言使用字符数组来存放字符串。C-string方法 | C++中提供了一种新的数据类型,字符串类型(string类型),它是在C++标准库中声明的一个字符串类。string方法 |
C语言中不存在引用 | C++中存在引用 |
C语言中结构体成员只能是数据 | C++中结构体成员既可以包括数据,也可以包括函数 |
C语言中使用库函数malloc和free来分配和撤销内存空间 | C++中使用运算符new和delete,来进行,执行效率高 |
C语言中定义枚举类型变量时需要包括关键字enum | C++中可以不包括enum,直接用枚举类型名 |
C语言强制类型转换格式为(int)a | C++中强制类型转换格式为int(a) |
example 1:
#include <iostream>
using namespace std;
int main()
{
int max(int x, int y);//函数的声明
int a,b,c;
cin>>a>>b;
c = max(a, b);
cout<<"max = "<<c<<endl;
return 0;
}
int max(int x, int y)
{
int z;
if(x > y) z = x;
else z = y;
return z;
}
main
函数必须声明为int
型,因为操作系统要求执行一个程序后必须向操作系统返回一个数值:如果程序正常执行,则向操作系统返回数值0;否则返回数值-1;cout
是C++系统定义的对象名,称为输出流对象;cin为输入流对象(输入时两个数据间用一个或多个空格间隔,不能以逗号或其他符号间隔);#include < iostream >
” 是C++的一个预处理指令,是一个包含指令,作用是把文件”iostream”中的内容包含到该命令所在的程序文件中,代替该指令;using namespace std
“的意思是使用命名空间”std”,C++标准库中的类和函数是在命名空间std中声明的;#define
指令定义的符号常量和用const
定义的常变量:符号常量 | 常变量 |
---|---|
符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存存在以符号常量命名的存储单元。 | 常变量具有变量的特征,具有类型,在内存中存在以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量不同的是指定变量的值不能改变。 |
static
的局部变量)、函数调用时的现场保护和返回地址等auto
)、静态的(static
)、寄存器的(register
)、外部的(extern
) static
声明,编译系统动态分配存储空间extern
只是对一个已定义的外部变量做声明,以拓展作用域static
在定义外部变量时进行声明,则此外部变量只限于本文件引用,而不能被其他文件引用(静态外部变量)int a;
)和引用性声明(不需要建立存储空间,eg:extern int a;
) A[char,short] ==> B(int)
B --> C[unsigned]
C --> D[long]
D --> E[double]
F[float] --> E
double
赋值给float
时,要注意数值范围不能溢出int
,short
或long
型数据赋给一个char
型变量,只将其低8位原封不动地送到char型变量(发生截断)max = (a>b)? a: b;
if()...else if()...else
switch() {case x: ...;case y: ...;default :...}
case
和default
出现的次序不影响执行结果switch
语句时,根据switch表达式的值找到与之匹配的cas
e子句,就从此case
子句开始执行下去,不再进行判断,所以此时需要”break
“语句来达到跳出的目的case
可以共用一组执行语句while(表达式)语句
do 表达式 while(表达式)(do-while语句)
for(表达式1;表达式2;表达式3)语句
break
“或”continue
”跳出循环或跳出本次循环/*
类型名 函数名([void])
{
声明部分
执行语句
}
*/
/*
类型名 函数名(形式参数列表)
{
声明部分
执行语句
}
*/
形式参数 | 实际参数 |
---|---|
定义函数时函数名后面括号中的变量名称 | 在主调函数中调用一个函数时,函数名后面括号中的参数(可以为表达式) |
在未出现函数调用时,形参不占用内存中的存储单元 | 实参可以为常量、变量或表达式,但是要求变量必须有确定的值 |
实参与形参的类型应相同或赋值兼容(按照不同类型数值的赋值规则进行转换) | |
实参与形参变量的数据是值传递,即单向传递。只能由实参传给形参,无法传回 |
printstar(); //函数语句
c = 2 * max(a,b);//函数表达式
m = max(a, sqrt(b));//函数参数
func(i, ++i);
/*func(3,4),从左至右顺序求值
func(4,4),从右至左顺序求值*/
float add(float, float);//函数原型
/*函数类型 函数名(参数类型1, 参数类型2...);
函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2...);
函数的定义 | 函数的声明 |
---|---|
定义是指对函数功能的确立 | 声明是在定义前事先将函数的有关信息通知编译系统 |
包括指定函数名,函数类型、形参及其类型、函数体等 | 通知函数的名字、函数的类型以及形参的个数、类型和顺序(不包括函数体) |
inline
;也可以只在函数声明时加inline
,而定义时不加switch
语句int f(int);
long f(int);
void f(int);
template <typename T>//T为类型参数;typename也可以用class代替,都表示类型名
T max(T a, T b, T c)
{
if(b>a) a = b;
if(c>a) a = c;
return a;
}
…
…
…
…
…
…
…
…
static 类型标识符 函数名(形参表)
extern int func(int a, int b)//省略extern,默认为外部函数
void swap(int a, int b);
int i = 3, j = 5;
swap(i, j);//调用函数时,形参和实参不是同一个存储单元。值传递(传值方式)
void swap(int *p1, int *p2);
int i = 3, j = 5;
swap(&i, &j);//值传递(传值方式),实参的值是变量的地址
void swap(int &a, int &b);
int i = 3, j = 5;
swap(i, j);//地址传递传递(传址方式),实参是变量名,而传递的是变量的地址
类型名 数组名[常量表达式]//一维数组的定义
数组名[下标]//一维数组的引用
类型名 数组名[常量表达式][常量表达式]//二维数组的定义
数组名[下标][下标]//二维数组的引用
/*...*/
void select_sort(int array[], int n);//函数
int a[10];
select_sort(a,10);//调用函数
/*...*/
void select_sort(int array[], int n)//函数定义
{
/*...*/
}
char c[5];
c = {‘C‘, ‘h‘, ‘i‘, ‘n‘, ‘a‘};//错误
c[0] = ‘C‘; c[1] = ‘h‘; c[2] = ‘i‘; c[3] = ‘n‘; c[4] = ‘a‘;//正确
char str[] = {"I am happy"};//正确,使用字符串常量初始化字符数组
char str[] = "I am happy";//正确
‘\0‘
表示字符串结束。对一个字符串常量,系统自动在所有字符后加‘\0‘
作为结束符。程序中检测字符串长度也依靠字符串结束标志strcat(char[], const char[]);
strcpy(char[], const char[]);
strcpy(str1, str2, 2);//将str2中前2个字符复制到str1中
str1 = str2;//错误,不能将字符数组直接赋值给另一个字符数组
strcmp(const char[], const char[]);
/*如果字符串1等于字符串2,函数值为0
如果字符串1大于字符串2,函数值为一正整数
如果字符串1小于字符串2,函数值为一负整数*/
strlen(const char[]);//其值为字符串实际长度,不包括‘\0‘
#include <string>
string string1;//定义字符串变量
string1 = "China";//赋值
+
)、比较(==,>,<,!=,>=,<=
)、复制(=
)\0
*
”表示指向,比如i_pointer
是一个指针变量,则*i_pointer
表示i_pointer
指向的变量基类型 * 指针变量名
/*基类型指指针变量指向的变量的类型
"*"表示定义的该变量为指针变量
int * pointer_1;
int a = 100;
pointer_1 = &a;//变量a的地址给pointer_1
int * pointer_2 = &a;//定义指针变量并初始化
p = &a;
p = array;//数组
p = &array[i];
p = max;//函数
p1 = p2;
*
与&
的优先级相同,但按照自右而左的方向结合void swap(int * p1, int * p);//声明指针参数的函数
int * pointer_1, * pointer_2;
swap(pointer_1, pointer_2);//调用函数
void swap(int * p1, int * p)//函数定义
{
/*...*/
}
int max(int x, int y);
int (*p)(int,int);//定义指向函数的指针变量
p = max;//指针p指向max函数的入口地址
m = p(a, b);
//类型名 * 函数名(参数列表)
int *a(int x, int y);
int a[10];
int * p;
p = &a[0];//将a[0]地址赋给指针变量p
p = a;//与上面等价
/*p+1指向同一个数组中的下一个元素,实际地址是p+1*d*/
char str1[] = "I love China!";
cout << str1 << endl;
string str2 = "I love China!";
cout << str2 << endl;
char * str3 = "I love China!";
cout << str3 << endl;
const 类型名 * 指针变量名;//常用作函数形参,防止指针形参所指对象的值改变影响实参
类型名 * const 指针变量名;//必须在定义时初始化,指定其指向
const 类型名 * const 指针变量名;//必须在定义时初始化,指定其指向
&
是引用声明符,在其他场合出现的都是地址符(出现在声明中的&
是引用声明符,其他情况是地址运算符)structure
)、共用体类型(union
)、枚举类型(enumeration
)、类类型(class
)struct
)/*声明*/
struct 结构体类型名//声明
{成员表};//类型名 成员名
/*定义*/
struct Student
{/*...*/};
Student student1, student2;//先声明再定义变量
struct Student
{/*...*/}student1,student2;//声明(Student结构体)的同时定义变量(student1,student2)
/*初始化*/
struct Student
{/*...*/}student1 = {/*...*/};
struct Student
{/*...*/};
Student student2 = {/*...*/};
/*引用*/
student1 = student2;
student1.num = 10010;//结构体变量名.成员名("."是成员运算符, 优先级最高)
/*以下三种形式等价*/
/*p为指向结构体变量的指针*/
/*结构体变量.成员名,eg:stu.num
(*p).成员名,eg:(*p).num
p->成员名(->为指向运算符),eg:p->num*/
p->n++;//得到成员n的值,用完后使它加1
++p->n;//得到成员n的值,并使之加1,然后再使用它
new 类型[初值]//new分配数组空间时不能指定初值
new int(100);//初值为100的整数空间,返回存储空间的地址
new char[10];
new int[5][4];
float *p = new float(3.14159);
delete 指针变量;
delete [] 指针变量;
enum
)enum 枚举类型名 {枚举常量表};
enum weekday{sun, mon, tue, wed, thu, fri, sat};//声明枚举类型
weekday workday, week_end;//定义变量
enum weekday workday, week_end;//C语言定义方式
enum weekday{sun, mon, tue, wed, thu, fri, sat}workday, week_end;//声明同时进行定义
workday = (weekday)2;//C语言强制类型转换
workday = weekday(2);//C++强制类型转换
typedef
)typedef int INTERGER;
typedef struct
{
int month;
int day;
int year;
}DATE;//DATE为新类型名,而不是结构体变量
typedef int NUM[100];//声明NUM为整型数组类型,包含100个元素
typedef char * STRING;//声明STRING为char * 类型
typedef int (* POINTER)();//声明POINTER为指向返回整型的函数的指针类型
标签:point 寄存器变量 tab ios 引用 预处理 只读 c程序 agg
原文地址:https://www.cnblogs.com/Chary/p/12237754.html