1、int *p = new int[10];//理解,数组的动态分配
//new int[10] 新申请一段可以保存10个int型整数的内存空间
//int* p 定义一个int型指针
//int *p=new int[10] 让int型指针指向申请的内存空间的首地址!
2、double d3 = 1.25e + 20;
1.25e + 20 表示1.25的10的20次方。
3、强制类型转换
强制类型转化没有四舍五入。
4、函数指针中使用typedef
typedef int (*PF)(int *, int);
以上定义了一个函数指针。
一般来说,用typedef关键字会使该声明更简单易懂。
int (*PF)(int *, int);
也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:
typedef int (*PF)(int *, int);
这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:
PF ff(int);
5、函数的返回值和函数的调用参数值注意
在返回值和调用参数值的时候需要考虑到使用的是地址还是值本身。
(一)需要返回值和调用参数值为地址的时候。需写指针名、者函数名、&取地址的变量。
(二)需要使用值本身的时候。需要传递的就是*p(指针所指向的内容)、变量。
6、运算符的结合性?
运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。也就是同一的时候哪边的优先级高于哪边。
举个例子,假设是一个运算符,又有表达式abc,如果是左结合的,那么该表达式被解析为(ab)c,如果是右结合的,那么该表达式将被解析为a(b~c)。比如上表中三目运算符?:是从右向左结合的,那么下面的表达式a > b ? b > c ? 1 : 0 : 2将被解析为 a > b ? (b > c ? 1 : 0) : 2。
参考网址
7、if/else结构_嵌套结构
if (...){...}
else if (...){...}
else if (...){...}
else {...}
if/else嵌套结构
直观表达
8、flaot和double的精度?
float是32位,double是64位
float32位中, 有1位符号位,8位指数位,23位尾数位;
double64位中,1位符号位,11位指数位,52位尾数位。
取值范围看指数部分
float是有符号型,其中,8位指数位,2^8=(-128—127),
因此实际的范围是-2128—2127,约为-3.4E38—3.4E38;
同理double范围约是-1.7E308—1.7E308。
精度是看尾数部分
float尾数位23位,2^23=8.3E6,6位,所以float的有效位数是6位;
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位。
9、浮点数在选择(判断)结构中
比较方式参考:
10、float x = 1.0f;
f 代表这个数据是float类型的常量;
如果你直接输入1.0就是double类型 ,当你赋给float类型的时候就会抛异常了。
11、int a, b, c = 0; 和 int a = 0, b = 0, c = 0;
For your first code block, int a, b, c = 0;, you are not initializing the primitive types. You cannot use a and b until it is assigned something, event if a = default(int) or just a = 0. Until first assignment, you'll get a compilation error that the variable must be assigned before first use.
Now if you are comparing int a = 0, b = 0, c = 0; and int a = 0; int b = 0; int c = 0;, those are identical.
第二种方式才是正确的初始化方式。
12、new的使用
new用法:
1. 开辟单变量地址空间
1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.
2)int *a = new int(5) 作用同上,但是同时将整数赋值为5
2. 开辟数组空间
一维: int *a = new int[100];开辟一个大小为100的整型数组空间
二维: int **a = new int[5][6]
三维及其以上:依此类推.
一般用法: new 类型 [初值]
delete用法:
1. int *a = new int;
delete a; //释放单个int的空间
2.int *a = new int[5];
delete [] a; //释放int数组空间
要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问.
用new和delete可以动态开辟,撤销地址空间.在编程序时,若用完一个变量(一般是暂时存储的数组),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它.
13、静态检查
静态数据类型检查语言也叫静态类型语言,与此相对有动态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
注意:C++并没有提供对指针有效性的静态检查。
对于动态语言与静态语言的区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed。
14、memset用法
void *memset(void *s, int ch, [size_t]
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的[结构体]或[数组]清零操作的一种最快方法。
网友评论