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!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,474评论 3 44
  • #mark- 01-二维数组基本概念 //问题:什么是二维数组?二维数组的格式?二维数组如何存储?二维数组是如何遍...
    飞飞喵阅读 1,293评论 0 1
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 734评论 0 2
  • 每个人都渴望爱,每个人都渴望被看见。人生是一场自证预言的旅程。作为最爱你们的女人,在敲打给你们情书时,内心充满了虔...
    浮沉浮沉阅读 208评论 0 0
  • 记得还是我很小的时候,坐在爸爸的怀里看电视里正在播放的新闻联播,那时的我还没有开始上学,虽然字不认得几个,但...
    黑夜中的猫阅读 401评论 0 0