- EOF是一种循环中用来停止的标志。常用于while中。
- if如果没加花括号会用最近的语句。
- 调试不成功,别忘了&和;和if中的 = ==
- 注意要减少warning
- switch ()括号中只能出现整型;case 后加常量和:(常量包括‘A’)
- 为什么scanf没有&却没报错,因为他以为没有&的那个数就是一个指针地址。
- memset可以用来使数组初始化。memset(array,0,sizeof(array))
- 数组变量是特殊的指针。
- 用memset来初始化数组的时候(第一个表示第一个字符的位置,第二个表示想初始化的值,第三个表示从第一个地址开始初始化的数量)所以他也可以用相同的原理来初始化二维数组。
- 补充memset(因为memset是按字节赋值的,取变量a的后8位二进制进行赋值。
1的二进制是(00000000 00000000 00000000 00000001),取后8位(00000001),int型占4个字节,当初始化为1时,它把一个int的每个字节都设置为1,也就是0x01010101,二进制是00000001 00000001 00000001 00000001,十进制就是16843009。
之所以输入0,-1时正确,纯属巧合。
- %i = %d,%I 是老式的写法。
- 测量字符串的长度不必自己计算的,就用strlen就可以了
- 测量汉字的数目就可以用数组遍历,其一个汉字相当于两个<0的数字
- 技巧:在写判断一个常量是否等于一个变量是最好写成常量==变量,防止出错。
- 构造函数的时候,也可以用结构和布尔值的方式进行构造。结构在进行构造的同时注意要多一个空格,因为先定义的一个struct suibian 后面想应用这个构造只能 struct suibian temp()
- 定义结构的指针struct date *p = &today
- 在判断是不是闰年的时候,我们先理清关系。如果能被400整除的一定是闰年,如果能被4整除且不被100整除的也一定是闰年。闰年就这两个定义。只要有任一满足了就成功了。
- 用结构体的时候struct 和定义的结构不能分开。为了方便尝试一下 用typedef 自己定义一个类型。
- 指针的使用定义必须要加上类型。
- enum的性质
2. 枚举元素本身由 系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,sat值为6。只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如一定要把数值赋予枚举变量,则必须用 强制类型转换。
a=(
enum
weekday)2;
enum weekday{sun,mon,tue,wed,thu,fri,sat}; enum weekday a,b,c; //或者为: enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c; //或者为: enum{sun,mon,tue,wed,thu,fri,sat}a,b,c;
enum从0开始赋值, -
取模满足的分配律:(a+b) % p = ( a % p + b % p ) % p (9)
-
递归的调用,在处理大数据时占用的空间过大,很容易溢出的。
-
关于二维数组,要把他传入函数时要考虑a[][列数要写];
-
请问(int&)是什么意思?整型变量的引用定义,例如:
int a;
int &A=a;
引用即是一个变量的别名,例中A是a的一个别名,每一次访问A,对A的一系列操作实际上就是访问a,对a进行操作,此时的A和a在有些编译器中时同一个地址。在定义引用时必须初始化,且必须用有内存地址的对象初始化,初始化之后不可以在指向别的对象。
if(year%4==0 && year%100!=0 || year%400==0)
Question
什么时候用while(gets(str)!=NULL)??
什么时候用while(gets(str)!=EOF)??
什么时候用while(gets(str)!=EOF)??
Answer
区别就是
gets 出错了 会返回NULL
以及 然后任何情况下 gets都不会返回 EOF
gets 出错了 会返回NULL
以及 然后任何情况下 gets都不会返回 EOF
数据类型根本不匹配
gets 返回值类型是 char*
EOF的数据类型是 int[诸如此类 反正不是指针]
gets 返回值类型是 char*
EOF的数据类型是 int[诸如此类 反正不是指针]
所以不能用gets ()!=EOF
Question
char** argv与char *argv[]区别
Answer
指针是个地址。
char *a: a的值包含字符型数据,取消对a的引用(*a)得到一个字符,
不取消引用得到一个字符串,printf("%c",*a)输出一个字符或者printf("%s",a)输出字符串;
char **a: a的值包含一个地址,该地址包含字符字符型数据,取消对a的引用(*a),得到该地址,再取消对该地址的引用(**a),得到一个字符, printf("%c",**a)输出一个字符printf("%s",*a)输出字符串;
char *a[]: a是一个数组,数组的元素是地址(地址其实就是指针),地址包含的值是字符型数据,printf("%c",*a[i])输出一个字符,printf("%s",a [i]))输出字符串;
char *a或char **a可以改变a的值,char a*[]不能改变a的值。
明白否?
char *a: a的值包含字符型数据,取消对a的引用(*a)得到一个字符,
不取消引用得到一个字符串,printf("%c",*a)输出一个字符或者printf("%s",a)输出字符串;
char **a: a的值包含一个地址,该地址包含字符字符型数据,取消对a的引用(*a),得到该地址,再取消对该地址的引用(**a),得到一个字符, printf("%c",**a)输出一个字符printf("%s",*a)输出字符串;
char *a[]: a是一个数组,数组的元素是地址(地址其实就是指针),地址包含的值是字符型数据,printf("%c",*a[i])输出一个字符,printf("%s",a [i]))输出字符串;
char *a或char **a可以改变a的值,char a*[]不能改变a的值。
明白否?