day1(笔记)(指针之前)

运算符: 
 sizeof的常用用法:
     1、sizeof(arr) 类型*个数/int*p=arr sizeof(p) 只能是4或8   
        2、sizeof(arr[0])   
     3、sizeof(arr)/sizeof(arr[0])
          *sizeof括号里不运算,结果是最大的
       *变长数组不能初始化
 只要式子中出现了位运算符,必须转换成二进制’补码‘再进行运算
数组:
  *实参与形参之间是以赋值的方式进行传递数据的,并且是单向值传递     数组作为参数传递时,是"址传递"(首地址),相当于调用者与函数共享数组
 数组越界可能的影响:1、一切正常 2、段错误(核心已转储) 3、脏数据
 二维数组
 变长数组
进制转化:
 原反补:最高位是符号位不变化,正数的反,补码都是本身。
    -127
      1111 1111   原码
      1000 0000   反码
      1000 0001   补码
类型限定符(常用几个):
  static:
       改变存储位置:
            改变局部变量(块变量)的存储位置,由stack改为data(初始化)或者bss(未初始化,初始化为0)
       延长生命周期:
            延长局部变量的生命周期,直到程序结束才释放
       限制作用范围:
            限制全局变量的使用范围,限制只能在本文件内使用
            注意:使用static修饰全局变量,可以防止该变量被别的文件使用,以及防止命名冲突
   const
        "保护"变量的值不被显式地修改
        **如果通过内存进行修改,还是可以改的
        **使用const修饰data段数据,那么该数据会存储到text段中,如果强制修改会段错误
递归:
  ***例题:使用递归模拟N层汉诺塔的移动过程***  

  #include <stdio.h>

  void move(int n, char from, char to, char aux)
  {
    if (n==1)
  {
    printf("从 %c 移动到 %c\n", from, to);
    return;
  }
    move(n-1,from,aux,to);
    printf("从 %c 移动到 %c\n", from, to);
    move(n-1,aux,to,from);
  }

  int main()
  {
    int n;
    printf("请输入汉诺塔的层数:");
    scanf("%d", &n);
    move(n, 'A', 'C', 'B');  
  }

posted @ 2023-07-06 23:53  歪爱慕外  阅读(18)  评论(0)    收藏  举报