C语言之数组③ --- 一维字符型,二维数组

一维字符型数组

C语言中,字符数组可以用来存储字符串 ,而字符串在内存中存储的方式 也是以 字符数组形式存储的 。在使用时,需要注意处理的是字符串还是数组。若处理的是字符串,操作的时候,往往以 结束标志 '\0'为 操作依据,若处理的是数组,操作的时候,往往以 数组长度 作为操作依据 。

字符串 有一个专门的结束标志 '\0',在内存中也要占一个字节。只要是字符串,必须有'\0'。
比如字符串“hello”,它的字符串长度是5个字节,但是它所占的内存空间字节数实际上是6个。

语法:

数据类型  数组名[数组长度]; 

      char      s    [20]; //一维字符型数组

puts 和 gets

int puts(const char *s);
 功能是输出一个字符串 
     参数:
         s   //表示字符串 ,可以是字符数组名 ,也可以是字符串常量,比如 "hello"
    返回值:
          成功 非负数 
          失败 -1 
    注意:
       puts输出时 自动会加 换行

 

char *gets(char *s);
     功能:
         从键盘获得一个字符串 
     参数:
         s  //代表就是一块存储空间 --- 需要的是一个一维字符型数组的数组名
     返回值:
        成功 s 
        失败 NULL

常用处理字符串的函数

注意在使用以下函数时,都需要加上<string.h>的头文件

1.strlen

size_t strlen(const char *s);
 功能是计算字符串长度 
 参数:
    s //表示需要一个指针
      可以给的参数形式
      a.数组名 
      b.字符串常量 
 返回值:
     返回字符串长度

2.strcpy

char * strcpy(char *dest, const char *src);
功能是复制字符串:将src中字符串,复制到dest 
参数:
  src   // 表示原字符串 
          可以给的实参形式:
          a.一维字符数组名
          b.字符串常量           
  dest  // 表示目的字符串
         可以给的实参形式:
          一维字符数组名
 

3.strcat

char *strcat(char *dest, const char *src);
   功能是拼接字符串 
   参数:
      dest  //目的字符串 
            可以使用的实参形式
            一维字符型数组名 
      src   //源字符串 
             可以使用的实参形式
            a.一维字符型数组名  
            b.字符串常量 

4.strcmp

int strcmp(const char *s1, const char *s2);
 功能是比较字符串大小 
 参数:
  s1  //字符串 
  s2  //字符串 
     数组名 
     字符串常量 
     
返回值: //最后 停的位置上字符的差值 来反映大小 
  s1 > s2  // >0  
  s1 == s2 // 0 
  s1 < s2  // <0 
 

可以试着自己编写代码,来实现上述函数所实现的功能

二维数组

语法:

类型说明符  数组名 [常量表达式] [常量表达式]

     eg:  int  a [3][4]

数组初始化:

  int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//全部初始化 				
  int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//全部初始化 			   
  int a[3][4] = {1,2,3,4,5,6};//部分初始化 	
  int a[3][4] = {{1,2},{5,6},{9,10}};//全部初始化

数组元素的引用: 数组名 [行][列];

二维数组的本质:

前面的文章提过,数组也是一种数据类型。如何判断标识符所代表的数据类型?去掉标识符,剩下的就是标识符对应的数据类型。比如 int a [4],a所代表的类型是int [4],这就是所谓的数组类型。

那么在二维数组中,int [4]  a [3] 实质上也是一个一维数组,只不过这个一维数组的元素,是一个一维数组类型,然而,在C语言中不允许这样写,所以写成了int a [3] [4]。

二维数组在内存中实际上是下面这个图上的形式存储的,也就是说:二维数组在内存中按行存储,a[0]、a[1]、a[2]实际上是一个数组名。

因此注意:

1.c语言中,并不存在真正的二维数组,都是用一维数组模拟的。
2.二维数组的本质, 实际上 一维数组类型的一维数组,也就是数组的数组 。       
3.二维数组数据存储时,按行优先存储。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值