C语言学习 ---数组part2

一维字符型数组:

 char s[10];    //一维字符型数据
                      //这个数组是用来放char类型的

要提到的是,计算机存储字符型数据时会以字符串的形式存入。

eg:想存入计算机一个“hello”,实际存在计算机里的字符串最后都带一个“\0"在后面,作为结束的标记。形式上只存了一个“hello”实际上存储的时“hello\0”

通常的利用这个机制  当想要遍历一个字符型数组的时候,可以通过while(s[i]!=‘\0‘)来判断是否将字符串操作完毕

说回字符数组:

1、字符数组的初始化:

可以直接初始化也就是全部初始化,部分初始化,

  eg:         char s[10] = {1,2,3,4,5,6,7,8,9,10};                        //全部初始化

                char s[10] = {1,2,3,4,5};                                         //部分初始化

注意:

还有一种情况是没有初始化,也就是未初始化。未初始化的情况下字符数组里面的都是垃圾值(随机生成)

eg:          char s[10] ;

2、给字符数组赋值

//赋值
    for(i = 0;i < n;++i)        //通过表达式赋值
	{
	     s[i]='a' + i;
	}
   //通过输入赋值
     for(i = 0;i < n;++i)        //通过表达式赋值
	{
	     scanf(”%c“,&s[i]);     或者  s[i] = getchar();vi
	}

一些常用的字符串操作函数:

gets()   功能:给字符数组中输入一个”字符串“

参数:
       s 表示 需要传的是一个字符数组的名字
     返回值:
      表示 存放字符数组的 那块空间的地址

 puts()  功能:将字符串输出,并且他会默认输出一个‘\n’

参数:
      可以是数组名 ,也可以是一个字符串常量
     返回值:
      成功     非负数
      失败       -1

puts()这个函数就相当于
  while(s[i] != '\0')                                //当遇到’\0‘的时候字符
  {
        printf("s[%d]=%c\n",i,s[i]);
       i++;
   }

要说明的是:gets()这个函数是非常危险的不推荐使用,很容易就会越界,不容易发现

注意!:

数组是用来存储数据的!!!!!!

字符数组主要是存储字符串数据的!!!!!

字符串长度指的是 ‘ \0 ’  前面字符的个数
eg:   ”hello“    他的字符串长度是5

strlen    计算字符串的长度              使用的时候要加上头文件 #include <string.h>
函数原型:  size_t strlen(const char*s);
功能:统计给到的字符串的长度
参数:
   s //数组名 或 字符串常量
 返回值:
   表示字符串的长度
    
    字符串复制:
    因为字符数组不能整体赋值
    所以eg:   char s1[] = "hello";
                      char s2[] = {};
                      s2 = s1 ;                     //在c语言中是不可以的

------------------------------------------------------------------------------------------------

while(s2[i] = s1[i])      //把s1字符数组里的字符赋到s2中
    {
             ++i;
    }

strcpy
功能: 将 str中的字符串拷贝到dest中ssd

eg:
                char dest[10];
                char src[10] = "hello";
                strcpy(dest,src);

strcat
 功能: 将src中的字符串拼接到dest中
 eg:
       char dest[100]= "world";
       char src[] = "hello";
       strcpy(dest,src);    //可以这样------src是一个字符数组数组名
       strcpy(dest,“hello”)  //也可以这样 ------src是一个字符串常量

strcmp
功能:   比较s1和s2字符串的大小      //使用方法strcmp(s1,s2)

返回值:     //输出的数字是两个字节的差值。(相减)
>0  s1>s2
<0  s1 <s2
==0  s1 = = s2

strlwr
功能: 把字符串中大写字母换成小写字母

strupr
功能: 把字符串中的小写字母换成大写字母

有趣的一部分是字符串的比较:

字符串比较的规则和其他语言中的规则相同,对两个字符串从左到右依次比较他们的ASCII码值
直到出现不同的字符或者遇到’ \0 ‘为止
若是全部字符相同则认为相等:
若出现不同的字符,则以第一个不相同的字符的比较结果为基准。

----------------------------------------------------------------------------------------
二维数组:    
语法:
 类型说明符 数组名[常量表达式][常量表达式]
 
  类型说明符    ---表示数组中要存储的数据的类型
  数组名        ---起名字符合标示符定义的规则
                    //数组名所代表的类型  - - -去掉名字之后剩下的就是对应的类型
                    //数组名所代表的值 -----首元素的地址
                  
  [常量表达式]  -----两个表示的就是二维数组
  [常量表达式]
  
  eg: int a[3];     //一维整型数组
           int a[3][4];  //二维整型数组

理解二维数组:
int a[行数][列数];   //定义了一个n行m列的总共 n * m int型变量的数组。
可以理解为一个线性代数的数列


计算机中存储的方式:   线性存储;

二维数组的本质:
可以把a看作是一维数组,他有n个元素,每一个元素都是一个一维数组;n个元素中又存在m个元素。

c语言中,并不存在真正的二维数组,本质上都是一维数组。

//二维数组的使用
int  a[3][4] = {1,2,3,4,5,6,7,8,9,1,2,3,4}
int  a[3][4] = {{1,2,3,4},{0},{5,6,7,8},{0},{9,1,2,3}}   //按行初始化
int  a[3][4] = {1,2,3}    // 部分初始化
int  a[3][4] = {}       //未初始化 里面都是垃圾值

	for(i=0;i<3;++i)         //给二维数组赋值
	{
		for(j=0;j<4;++j)
		{
			//a[i][j] = ’a‘;         //直接赋值
			scanf(“%d”,a[i][j]);   //输入赋值
		}
//二维数组的输出
for(i=0;i<3;++i)
	{
		for(j=0;j<4;++j)
		{
			printf("%d",a[i][j]);
		}
		putchar('\n');       //每行结束都打印一个换行字符
	}

注意:
1、二维数组中,也可以是变长数组
eg:      int a[n][n];     
2、二维数组中可以省略行数,不可以省略列数
eg:        int a[3][4];       //3可以省略,4不可以
             int [4] a[];       //本质上省略的还是一维数组的

二维字符型数组: char a[3][4]
                          char str[5][10];      //5个字符串每个字符串可以10个字符的长度 

                             实际上 str[i]        //就表示内部一位数组的数组名

赋值的时候可以使用  gets(str[i]);     加上一个for循环来给这个二维字符型数组来赋值

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值