常量
const常量 将变量定义为常量,防止意外的修改,增强程序的健壮 const常量会进行类型安全检查
整型-编译器确定常量的类型--除非有理由存储为其他类型,否则将整型常量存储为int类型
变量
变量声明 declare variables
变量赋值 Assign Values to Variables
// equivalent code
变量声明和赋值 Declare and Assign Value Together
defined --》 which is defined only after using it
变量定义--变量使用 Create Variables Print Variables
data-type
int --》 integer
float ---》 float point number
char --》 characters -- single quotes
变量名称-- snake case / Illegal Variable Names
C++ 变量
变量的作用域、生存期和可见性
变量--全局变量 局部变量
变量-声明 初始化 赋值
标识符
C++的作用域主要有四种:函数原型作用域、块作用域、类作用域和文件作用域
可见性是指标识符是否可见,可引用。
符号说明
& 指示变量的地址-取地址运算符
& 类型标识符--用来声明引用- 引用声明符号
引用,就是给变量取另外一个名字。而只要这两个变量的任何一个发生变化,都会影响到另外一个与其一起发生变化
当&a前面有类型符号时,比如例子的int &a,这种情况就是对引用的声明。而如果前面没有类型符号,则是取地址。
&符号另外一种常见的用法则是&&,表示逻辑与运算 位与,这个是最简单的用法
* 定义指针运算符 --当* 用于声明变量或者函数的时候,意为声明该变量或者函数为一个指针
当* 当做定义指针的运算符的时候,其作用目标可以是* 的左边,也可以是* 的右边,就像我们可以写 a++, 也可以写 ++a。当没有括号的时候,* 默认作用于左边的目标
* 解除引用运算符 表示取指针的值
运算
运算优先级 结合方向
单目运算符 双目运算符 多目运算符
类型转换
1.初始化和赋值进行转换
2.以{} 方式初始化进行住那换
3.表达式中的转换
4.传递参数时的转换
5.强制类型转换
思考的依据概念
01. 变量类型-变量名称-变量值
Change values of Variables
Value of One Variable to Another
Type conversion
02. 使用存储的方式理解--编译器 内存
存储类型-位置标签-存储内容
需要的存储空间--存储单位的名称
赋值--将值给存储单元
使用 &运算符来查看内存地址
指向向内存位置的表达式被称为左值(lvalue)--左值可以出现在赋值号的左边或右边
存储在内存中某些地址的数值被称为右值(rvalue)
声明不是定义--声明是声明,定义是定义--首次使用之前声明即可,不像C语言必须在开始位置
声明即定义--编译器为位置标签分配内存空间--即为变量分配内存空间
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储
03.并发编程--共享数据的保护本质上是在对抗编译器和处理器的优化,所以保护不能过度
会产生差异,原因主要来自下面三个方面:
编译器优化
处理器: 硬件平台,没有任何一个会提供完全的顺序一致(sequentially consistent)内存模型
CPU out-of-order执行
CPU Cache不一致性
C++程序的内存格局通常分为四个区:
全局数据区(data area),代码区(code area),
栈区(stack area),堆区(heap area)(即自由存储区)。
typeid(a).name() 返回描述变量类型的字符串(注意:是类型全名)
sizeof sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小
typeid是run time type identify,是运行时判定,sizeof是编译期判定
函数
function heading --》 其他部分之间的接口 描述了函数与调用其的其他函数的接口
函数返回类型return values
函数名
函数形参argument list==parameter list
function body --》 完成的指令
statement 语句
return statement 返回语句
eg int main(){}
int main(void){ return 0;}
void main(){} --不推荐
函数原型和函数定义
prototype 即带有分号的函数头,
函数头不带分号的话,编译器会要求提供函数体
函数有返回值和没有返回值 void 表示没有返回值
有个函数声明,编译器就知道参数压栈怎么压,同时也知道返回的时候怎么获取返回值
编译器 -- 隐式声明函数
-- 内建函数
gcc的内建函数主要分两类,优化也是基于gcc能够确定这个优化是没问题的
一类以_builtin_为前缀,
一类没有前缀。后者往往与某一个标准库的函数相对应,如sin,printf,exit
msc的内置函数叫Compiler Intrinsics
gcc的内置函数叫Built-in Functions
_builtin_parity(x) 此内置函数用于检查数字的奇偶校验
_builtin_clz(x) 此内置函数用于计算整数的前导零。clz 代表计数前导零
编译过程
.预处理(Preprocessing) 编译(Compilation) 汇编(Assemble) .链接(Linking)
补充
symbol
, comma 逗号
; semicolon 分号
. full stop 句号
: colon 冒号
~ tilde 波浪符。
? question mark 问号
header file 头文件==包含文件 include file
Java
程序执行的突破点
java中的main函数也叫作主函数,主函数是一个作为程序入口的静态函数,可以被JVM识别并自动加载。
syntax:
public static void main(String[] args) {
}
说明
主函数没有返回值,他的返回值类型是void。
main函数
主函数的参数类型是字符串数组
Python
python程序从开始到结尾顺序执行
让模块(函数)可以自己单独执行(调试),相当于构造了调用其它函数的入口,这就类似于C/C++里面的main函数了。
构造一个main函数入口就可以调用测试自己写的函数
if __name__ == '__main__'
R语言也是开始到结尾顺序执行
参考
关于gcc内置函数和c隐式函数声明的认识以及一些推测https://www.cnblogs.com/jkred369/p/6902600.html