翁恺老师c语言课程笔记

翁恺老师c语言课程笔记,第1张

因为本身就是自己自学时零碎记录的觉得自己容易遗忘的部分,所以可能显得有些杂乱,发出来和大家一起分享,也记录一下自己自学路的开端。


第二章:

1.当赋值发生在变量定义的时候称为初始化。


2.有运算符的式子叫做表达式。


3.会变的是变量,不会变的是常量。


4.const int change=100 ,int前加const,表示这个变量不能被修改。


5.两个整数的运算结果只能是整数,要用浮点数(10.0)。


6.double(双精度浮点数),float(单精度浮点数),表示浮点数。


输入时scanf里是%lf,输出时%f。


7.表达式里有算子和运算符。


8.赋值运算自右向左结合。


(a=b=6)。


9.“++“,“--”,运算符效果是使变量的值+1或-1,但a++的值是a+1以前的值,++a的值是a+1以后的值,效果都是让a+1.

10.当两个值的关系符合关系运算符的预期时,结果为1,不符合结果为0。


11.  1)算数运算>关系运算>条件运算>赋值运算(条件运算符:表达式1?表达式2:表达式3,如果1为真,表达式2的值为整个条件表达式的值,否则表达式3是表达式的值。


2)单目运算符优先级高于双目运算符 。


3)!>&&>||。


13.

14.

15.bool类型输出只能显示为1,0,没法输出true,false。


16.

17.a=3+4,5+6  ,a的值为前面那个,因为逗号预算符优先级最低,前面的值算出来优先赋值给a。


a=(3+4,5+6),值为后面那个,因为逗号组合关系为自左向右,而括号把逗号运算符的优先级提到最高。




18.

条件运算符优先级高于赋值运算符但是低于其他运算符。


19.如果没有大括号else自动匹配最近的那个if,缩进格式不能暗示else的匹配。


20.

  1. case后的值只能是整数常量。


  2. case会跳转到type那个值的位置开始执行程序,直到遇到break
  3. default部分除非遇到break,不然都会执行。


21.  #include(  rand()  )    #include(  time(0)  ).

Srand((unsigned)time(null))通过时间来生成不同的随机数种子,以达到生成随机数的目的,同样的随机数种子会生成同样的随机数。


22.break,continue

23.goto out;       (用于多重循环中直接跳出循环,会跳到goto后面那个值处。


)

   Out:

24.  1)定义数组时数组类型实际为数组中元素的类型。


2)C99之前数组的大小(元素的数量)只能是常数,之后可以用变量来定义数组的大小。


(不建议用变量定义。


3)一旦创建,数组大小不可以改变。


4)最大的下标为数组个数减1。


25.return会停止函数的运行并返回一个值或不返回。


26.函数声明的参数名称可以不写,但通常都会和函数定义中的一样。


27.c语言在调用参数时永远只能传值给函数。


28.变量生存期:参变量出现到消亡的时间   作用域:可以访问到变量的范围(变量起作用的范围)。


变量的生存期和作用域就是在函数大括号内部。


29.本地变量定义在块中(大括号里),离开块,变量就消失了。


块外面定义的变量块里面仍然有效,块里面定义了和外面同名的变量则掩盖了外面的,不能在一个块内定义同名的变量,本地变量不会被默认初始化。


30.sizeof()给出某个类型或变量占据的字节数。


常用法:用于计算数组的大小sizeof(a[n])/sizeof(a[0]).

31&可以得到变量的地址,地址的大小是否与int类型相等取决于编译器(32位还是64位),想要输出地址要用%p。


32.数组的地址&a=a=a[0],a[1]比a[0]大4,相邻的数组之间都差4.

33.  1)指针变量的值是别的变量的地址。


     2)int*p,q,   此时p是指针变量,q只是int类型的变量。


int*p=&i。


     3)作为参数时  例:void f(int*p)  f(&i)

4)*p作为一个整数,p是值的地址,改变*p的值,会改掉地址p所指向的变量的值。


34.数组作为函数参数时:

  1)在函数定义中数组为a[],中间为空

  2)此时函数中数组实际上是指针(数组的地址),因此在函数中不能通过sizeof()的方式得到函数的大小。


  3)int sum(int*ar, int n)=int sum(int ar[],int)作为函数参数时是等价的。


  3)int a[10]; int*p=a  对于数组取地址,不需要&

  4)但是数组的单元(每个元素)表达的是变量,在取地址时仍需&。


  5)&a==a==&a[0],数组a的地址等于a[0]的地址

  6)[ ]运算符可以对数组做,也可以对指针做

     int *p=&min;  //min 是普通变量

     *p=min;   p[0]=min;  //将变量当作数组取出该地址上的第一个值

  7)*运算符可以对指针做,也可以对数组做。


    int a[10];

    *a=a[0];

  8)数组变量是const的指针所以不能直接被赋值  

int a[] = int * const a;

35.字符类型  

   1)输入char c;

scanf(“%c”,&c);(输入1)

           Scanf(“%d”,&c);(输入49)  两种情况相等,因为1的ascll码等于49

   2)49==‘1’

   3)scanf(“%d %c”,&a,&c),  当同时输入整数类型和字符时,最好加空格,因为整数类型会一直读到不是整数类型为止。


36.逃逸字符

37.字符数组,字符串 (结尾有一个0或“/0”,因此字符串占据空间的大小比它的字面量大1,但是字符串的大小是不包括那个0的。


   1)c语言的字符串是以字符数组的形态存在的

   2)不能用运算符对字符串做运算

   3)通过数组的方式可以遍历字符串

   4)两个相邻的字符串常量会被自动连接起来

   5)字符串字面量可以用来初始化字符数组

38.字符串输入输出  

1)%s,输入时读到空格、tab或回车为止,不安全,超出界限会崩溃

2)%7s,中间加入数字,数字大小为字符串可读的最大长度,安全

39.char*string

   Scanf(“%s”,string),错误的,指针变量并没有指向一个实际地址,不能当作字符串来看

40.     char string[]=””,字符串长度为1.             Char string[100]=””,char[0]的值为“/0”

41.字符串数组   #include

   1)strlen()  返回字符串长度,不包括0

   2)strcmp(s1,s2),比较函数大小,相等返回0,否则返回它们不相等的字符,前面减后面的大小。


  Strncmp()只比较前n个长度

   3)strcpy(s1,s2),把s2表示的字符串,拷贝到s1所指向的空间(地址),需要足够的空间    安全版本:strncpy() ,n表示最长能够拷贝的长度

   4)srcat(s1,s2),把s2表示的字符串拷贝到s1后面连接成一个字符串,需要s1有足够的空间   安全版本:strncat(),n表示最长能够拷贝的长度

   5)strchr(s1,c)从左边开始寻找c在s1中第一次出现的位置

      Strrchr(),从右边开始找       没找到返回null,找到了返回字符c的地址

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存