一些笔记小结

来源:互联网 发布:sql复制表数据到新表 编辑:程序博客网 时间:2024/05/22 05:15
  1. EOF是一种循环中用来停止的标志。常用于while中。
  2. if如果没加花括号会用最近的语句。
  3. 调试不成功,别忘了&和;和if中的 = ==
  4. 注意要减少warning
  5. switch ()括号中只能出现整型;case 后加常量和:(常量包括‘A’)
  6. 为什么scanf没有&却没报错,因为他以为没有&的那个数就是一个指针地址。
  7. memset可以用来使数组初始化。memset(array,0,sizeof(array))
  8. 数组变量是特殊的指针。
  9. memset来初始化数组的时候(第一个表示第一个字符的位置,第二个表示想初始化的值,第三个表示从第一个地址开始初始化的数量)所以他也可以用相同的原理来初始化二维数组
  10. 补充memset(因为memset是按字节赋值的,取变量a的后8位二进制进行赋值。

    1的二进制是(00000000 00000000 00000000 00000001),取后8位(00000001),int型占4个字节,当初始化为1时,它把一个int的每个字节都设置为1,也就是0x01010101,二进制是00000001 00000001 00000001 00000001,十进制就是16843009。

    之所以输入0,-1时正确,纯属巧合。

  11. %i = %d,%I 是老式的写法。
  12. 测量字符串的长度不必自己计算的,就用strlen就可以了
  13. 测量汉字的数目就可以用数组遍历,其一个汉字相当于两个<0的数字
  14. 技巧:在写判断一个常量是否等于一个变量是最好写成常量==变量,防止出错。
  15. 构造函数的时候,也可以用结构和布尔值的方式进行构造。结构在进行构造的同时注意要多一个空格,因为先定义的一个struct suibian 后面想应用这个构造只能 struct suibian temp()
  16. 定义结构的指针struct date *p = &today
  17. 判断是不是闰年时候,我们先理清关系。如果能被400整除的一定是闰年,如果能被4整除且不被100整除的也一定是闰年。闰年就这两个定义。只要有任一满足了就成功了。
  18. 用结构体的时候struct 和定义的结构不能分开。为了方便尝试一下 用typedef 自己定义一个类型。
  19. 指针使用定义必须加上类型。
  20. enum的性质
    1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。
    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开始赋值,
  21. 取模满足的分配律:
    (a+b) % p = ( a % p + b % p ) % p (9)
  22. 递归的调用,在处理大数据时占用的空间过大,很容易溢出的。
  23. 关于二维数组,要把他传入函数时要考虑a[][列数要写];
  24. 请问(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)??
      Answer   
      区别就是 
      gets 出错了 会返回NULL
      以及 然后任何情况下 gets都不会返回 EOF    
      数据类型根本不匹配 
      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的值。
       明白否?
原创粉丝点击