8-二维数组/字符串/指针

People Lack Willpower,Rather Than Strength!

1.二维数组与参数

  • 1.二维数组的元素作为函数参数

    • 二维数组的元素就相当于基本数据类型变量,作为函数参数与变量相同
  • 2.二维数组中的一维数组作为函数

    • 二维数组的一维数组实际上就是一个一维数组,作为函数参数与一维数组相同
  • 3.二维数组作为函数参数

    • 二维数组作为函数参数是地址传递
      函数形参 void test(char c[][x]);
      • 二维数组作为函数形参,参数中一维数组的元素个数不可以省略:c[][x]√
      • 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入
      • 二维数组作为函数参数,在被调函数中可以计算出二维数组有多少列:sizeof(c[0])

2.字符串

  • 1.概念

    • 字符串是位于双引号中的字符序列. 在内存中以“\0”结束,所占字节比实际多一个!
  • 2.字符串的初始化

    • 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。

    所以问题是如果用指针定义一个字符串(char *p = "abc";),而指针又不能用来存放字符串,该字符串放哪里了???? 答:放在常量区!⭐️

  • 3.字符串的输入

    char ch[10];
    scanf("%s",ch);
    // 应该是:string\0再回车吧!错,不用加\0,因为一旦输入字符,未满10个,那么后面的空位会自动填充0!
    但是:  
    char c[5];
    c[0] = '0';
    printf("%d\n",c[2]);// 乱码

3.指针基本概念

  • 变量地址:系统分配给"变量"的"内存单元"的起始地址!

    • 由于通过地址能找到所需的变量单元,可以说地址指向该变量单元。因此将地址形象化的称为“指针”. 这么说来地址就是指针常量.用来存放该常量的变量就是指针变量,且该变量只能存储地址! ⭐️
  • 指针变量定义说明:变量类型 *p

    • 变量类型:说明该指针变量适用于存放该类型数据的首地址(但不绝对); 用该指针变量取值时,是以该类型为单位进行的!

    指针也可以被声明为全局、静态局部和局部的.

    疑问:地址是常量数据的,还是内存单元的,亦或是其管理者-变量的?⭐️
    应该是变量的吧?好像不可以对常量取地址!
    好像又不对,"string"这样字符串不是可以赋值给指针变量吗?
    
    "在计算机中所有数据都存储在内存单元中,而每个内存单元都有一个对应的地址, 只要通过这个地址就能找到对应单元中存储的数据." 由这句话可以看出地址是属于内存单元的!
    
    
  • 什么是野指针?空指针?

    • 获得未知内存空间首地址的指针变量!⭐️
    • 获得NULL值(ox0)的指针变量!

      NULL/nil is an rvalue(右值) of type 'void *',address of which cannot be taken ! 所以,我们可以简单把NULL当做指针常量(地址),值为ox0!

你可能感兴趣的:(8-二维数组/字符串/指针)