sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。
其作用是返回一个对象或类型所占的内存字节数。
使用 sizeof 的语法如下:
sizeof (data type)
1) sizeof (object); //sizeof (对象)
2) sizeof object; //sizeof 对象
3) sizeof (type_name); //sizeof (类型)
其中,data type 是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。
对象可以是各种类型的变量,以及表达式(一般sizeof不会对表达式进行计算)。
sizeof对对象求内存大小,最终都是转换为对对象的数据类型进行求值。
sizeof (表达式); //值为表达式的最终结果的数据类型的大小。
基本数据类型的sizeof
int main()
{
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;
cout << "Size of double : " << sizeof(double) << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}
最终结果:
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
结构体、指针、数组、联合体、函数的sizeof暂不展示
参考资料:
【菜鸟教程】C++ sizeof 运算符
【Mr.rong】c++中sizeof()的用法介绍
三目运算符
对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。
条件运算符是右结合的,也就是说,从右向左分组计算。
一般来说,三目运算符的结合性是右结合的,但是这点在ANSI C中并没有明确规定,所以它的执行顺序有时是由编译器决定的。
参考资料:
【百度百科】三目运算符
杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
杨辉三角的特点:
(与上图中的n不同,这里第一行定义为n=1)
第一种实现形式:
【二维数组实现杨辉三角 输出10行】
#include
#include
using namespace std;
/*杨辉三角最终显示效果是一个等腰三角形,两个最外边都是1
杨辉三角的根本在于,每个数等于它上方两数之和
*/
int main(){
const int n=11;//变量n在此处起到了限制输出行数的作用,可优化成用户输入
int i,j,a[n][n];
//使第一列和对角线元素的值为1
for (i=1;i
效果展示图
PS1:setw()函数的使用:
C++函数std::setw的行为与在流上调用n作为参数的成员宽度一样,它作为操纵器插入/提取(在输入流或输出流上插入/提取)。
它用于设置要在输出操作上使用的字段宽度。
特点:
PS2:std是什么意思?
在C++中,std其实就是standard标准的意思,std是一个类(输入输出标准),它包括了cin成员和cout成员,using name space std ;以后才能使用它的成员。
例如std::cin就是标准输入,std::cout就是标准输出的意思。
#include
参考资料:
【百度知道】C++中"std::"是什么意思?
第二种实现形式:
【指针动态开辟空间,一维数组实现杨辉三角 输出任意行】
该方法使用灵活,但是理解略显困难。
#include
#include
using namespace std;
int* YangHuiData(int n); //n是杨辉三角形的行数
void YangHuiShow(int *pData, int n);//在屏幕上打印杨辉三角形
int main() {
int n;
cout << "请输入杨辉三角形的行数";
cin >> n;
//计算杨辉三角并保存到二维数组
int *pData = YangHuiData(n);
//在屏幕上打印等腰三角形的杨辉三角
YangHuiShow(pData, n);
//n是杨辉三角形的行数
}
int* YangHuiData(int n) {
int *a = new int[n*n]; 用指针a指向new动态分配的长度为(n*n)*sizeof(int)的内存空间
//完成杨辉三角形的计算,没有显示的位置填0
int i, j;
for (i = 0; i
代码分析图(以3x3为例)
效果展示图
PS3:C++中如何正确的开辟一个动态的二维数组:
两种定义二维数组的方式,访问数据的方式,优缺点:
方法一:
定义方式:
int **p=new int*[10];
for (int i=0;i<=10;++i)
{
p[i]=new int[10];
}
访问数据的方式:直接通过a[i][j]访问第i行第j列的数据。
优缺点:通过a[i][j]访问数据容易,但是new的次数太多,释放空间不容易。
方法二:
定义方式:
int *p=new int[10*10];(ps:这种事当成一维数组连续开辟的。)
访问数据的方式:通过a[i*10+j]来访问第(i*10+j)个数据。
优缺点:访问数据很方便,且new的次数少,释放空间容易,但是不便于理解。
*图例:(看&p[9]和&p[10]等地址相差为4个字节,即它们是相连的,所以为一维数组)
参考资料:
【转载于 ycz_csdn】C++中如何正确的开辟一个动态的二维数组
参考资料:
【百度百科】杨辉三角
【coolsunxu】C++编写杨辉三角
【数学之美】杨辉三角(帕斯卡三角)的奇特性质
【百度经验】用例子理解排列组合及基本公式如何计算
宏(英语:Macro),是一种批量处理的称谓。
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。
命令格式:
(1)、简单的宏定义:
#define <宏名> <字符串>
例: #define PI 3.1415926
(2)、带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define A(x) x
一个标识符被宏定义后,该标识符便是一个宏名。
这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,
替换后才进行编译,宏替换是简单的替换。
宏替换发生的时机:
当我们在一个集成的开发环境如Turbo C中将编写好的源程序进行编译时,实际经过了预处理、编译、汇编和连接几个过程。其中预处理器产生编译器的输出,它实现以下的功能:
(1)文件包含
可以把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处。
(2)条件编译
预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行。
(3)宏展开
预处理器将源程序文件中出现的对宏的引用展开成相应的宏 定义,即本文所说的#define的功能,由预处理器来完成。
经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作只是纯粹的替换与展开,没有任何计算功能,所以在学习#define命令时只要能真正理解这一点,这样才不会对此命令引起误解并误用。
PS4:Turbo C:
Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog,主要用于C语言编译。
参考资料:
【博客园Boblim】C++宏定义详解
【王珂的个人笔记】C++中的宏定义
关键字,又叫保留字,是编译器能识别的特殊单词,每种计算机语言都会有其特定的关键字,C语言中有32位关键字。
关键字分类
32个关键字每个都有不同的意义,大体上根据其意义可以分为以下几类(下划线表示不同分类中有交集):
1)非常见:auto、register、volatile、goto
2)存储相关:const、extern、register、volatile、static、auto、signed、unsigned
3)数据类型:char、short、int、float、long、double、struct、union、enum、void
4)逻辑控制:if、else、for、while、do、break、continue、return、default、switch、case、goto
5)特殊用途:sizeof、typedef
(1).auto 自动变量
这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。
eg:
(2).static
1).static全局变量
当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。所以,普通全局变量穿上static外衣后,它就变成了新娘,已心有所属,只能被定义它的源文件(新郎)中的变量或函数访问。
2).static局部变量
3).static函数
C语言中的“private函数”,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。
中兴通讯2012校招笔试题的一道问答题:
static全局变量与普通的全局变量有什么区别 ?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别 ?
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别?
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.
(3).typedef
C 语言提供了 typedef 关键字,可以使用它来为类型取一个新的名字。
typedef 与 #define 的区别
(4).volaatile
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
(5).enum
关键字用于声明枚举,一种包含一组被称为枚举数列表的已命名常数的不同类型。
(6).const
const意味着只读,凡是修改了const不允许修改的东西,编译器报错.
C语言中不是有#define吗,干嘛还要用const呢?
参考资料解答
(7).extern
extern 意为“外来的”···它的作用在于告诉编译器:有这个变量,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。
参考资料:
【Mind语】C语言关键字auto与register的深入理解
【cnblogs】C语言中关键字auto、static、register、const、volatile、extern的作用
【Mr.TangR】C语言中static关键字的作用详解
【keyeagle】C语言中的static 详细分析
【Shuai_Xie】C语言中typedef关键字的作用
【littletigerat】面试点:解读关键字volatile(C语言面试题分析之一)
【Microsoft】enum(C# 参考)
【Null959_】C语言之const关键字总结
【xingjiarong】C语言中const关键字的用法
ACC——Accumulator,累加器,运算器中运算前存放操作数、运算后存放运算结果的寄存器;