1.关于sizeof(void)
sizeof(void*)准确的说,与编译器的目标平台有关。如果目标平台是32位的,那么sizeof(void*)就是4,如果是64位的,那么sizeof就是8,如果是16位的,就是2
2.运算符顺序
初等运算符(()[]->.)>单目运算符>算术运算符>逻辑运算符>条件运算符(三目运算符)>赋值运算符>逗号运算符。
例子:t=a*=a>b?a:b;
?:运算符优先级高于*=和=运算符,所以先计算?:的值
5.
“-6.2e”的意思:“6”表示输出的宽度为6个字符宽,如果整数部分超出,则按实际倍数输出。“.2”表示输出2位小数(四舍五入),不足时后面添0;对字符串,表示截取2个字符。“e”表示用指数形式输出。“-”表示在数据不足指定位数时,采用左对齐方式,即数字(字符)往左靠。默认为右对齐。
例子:218.83指数表示,2位小数为 :2.19e+02
实型常量又称实数或浮点数。在C语言中可以用两种形式表示一个实型常量。
小数形式
小数形式是由数字和小数点组成的一种实数表示形式,例如0.123、.123、123.、0.0等都是合法的实型常量。
注意:小数形式表示的实型常量必须要有小数点。
指数形式
这种形式类似数学中的指数形式。在数学中,一个可以用幂的形式来表示,如2.3026可以表示为0.23026×10^1 2.3026×10^0 23.026×10^-1等形式。在C语言中,则以“e”或“E”后跟一个整数来表示以“10”为底数的幂数。2.3026可以表示为0.23026E1、2.3026e0、23.026e-1。C语言语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。如e3、5e3.6、.e、e等都是非法的指数形式。注意:在字母e或E的前后以及数字之间不得插入空格。
程序运行的过程中,其值不能被改变的量称为常量。常量有不同类型,其中12、0、-5为整型常量。'a''b'为字符常量。而4.6、-8.7则为实型常量。
一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。
3.局部变量与全局变量的区别
局部变量:定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。再调用就是出错
全局变量:定义所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件。
1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
注:局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内
(1)static用途
static:可以声明静态全局,局部变量,声明静态函数,不可声明静态外部类
链接:https://www.nowcoder.com/questionTerminal/4e41a08bc11046eca723a475811e9296?toCommentId=1506949
static变量也称作静态变量,静态变量和非静态变量的区别是:
静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
4.
sizeof(double)表示的是在计算机中表示双精度型数据所需要的位数,这个人位数就是整数
5.枚举
enum中:首元素不赋值的话,默认为0;后一个元素不赋值的话比前一个元素大1
6.二义性宏的定义
例子:
#define SQ(a) a*a
main()
{
int i, j = 2;
i = SQ(2+2);
}
通过以上,你想得到 i = 4*4 = 16,
而实际确是被解析为 i = 2+2*2+2 = 8
2、解决问题
#define SQ(a) (a)*(a)
则不会产生二义性。
宏替换不占用运行时间,只占用编译时间
7.默认值
1.在具有多个参数的函数中指定默认值时,默认参数都必须出现在不默认参数的右边,一旦某个参数开始指定默认值,它右边的所有参数都必须指定默认值。
2.在调用具有默认参数的函数时,若某个实参默认,其右边的所有实参都应该默认。
8.C中关键字volatile
volatile int i=10;
int j = i;
...
int k = i;
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。
其中编译器编译优化是:
由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
10.头文件
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
#include <xxx.h>
2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。
#include “xxx.h”
11.struct与class两种类型的区别
c++:如果没有标明成员函数或者成员变量的访问权限级别,在strcut中默认的是public,而在class中默认的是private
c#: 如果没有标明成员函数或者成员变量的访问权限级别,struct和class中都是private的。struct和class的区别是struct定义的值类型,值类型的实例在栈上分配内存,而calss定义的是引用类型,引用类型的实例在堆上分配内存
12.字符串
c/c++ 中每个字符串都以字符'\0'作为结尾。串:即可链式存储,也可顺序存储。串为一种特殊的线性表
13.
在网络编程中,如果URL参数中包含特殊字符,如空格,'#'等,可能导致服务器无法获取正确的参数值,我们需要将这些特殊字符转化成服务器可以识别的字符。
14.indexOf
查找一个字符串中,第一次出现指定字符串的位置
比如str.indexOf(",") 查找str中第一次出现逗号的位置
15
> 输出重定向到一个文件或设备 覆盖原来的文件
>! 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
< 输入重定向到一个程序
16.科学技术法
输入:scanf("%[^E]E%d", A, &expo);