字符串和数组的区别

目录

1.字符串的含义

2.数组的含义

3.字符串和数组的表达形式

4.sizeof和strlen

本人在学习的时候对这两个概念不清楚如果搞混,故写此文。

1.字符串的含义

字符串:使⽤双引号括起来的⼀串字符就被称为字符串,字符串可以是数字,字母,也可以是汉字,符号。"abcdef"这样的字符串末尾有一个默认的\0。为了让字符串更好的存储运用,我们一般把字符串放在数组里面。分为字符串数组和常量字符串。

字符串放在数组中,有两种表达形式。

①char(数据类型) arr(数组名)[数据有多少个(常量值) ]={'a' , 'b','c','\0'}(这个是字符串数组)

②char arr [ ]= {"abc"}(这个是常量字符串,大括号可加可不加。)常量字符串[ ]里面的常量要加上'\0'也就是说这个数组的常量是4。

2.数组的含义

数组是⼀组相同类型元素的集合,

•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。

•数组中存放的多个数据,类型是相同的。

数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。

一维数组的语法 type arr_name[ ]={ }

type(数据类型) arr_name(数组名字,自己命名的)[常量值(数据的个数)可以不填]

3.字符串和数组的表达形式

char arr[ ] = {"123456"}这是数字的常量字符串,数字在双引号里面变成了字符串。

int arr[ ] = {1, 2, 3, 4, 5, 6}这是整形数组

整形数组和字符串数组一样,每一个数据的下标都是从0开始,比如"123456"下标0对应的是'1'除了它们所占的内存大小不一样,其他的都一样。

    常见数据类型和其所占的内存大小(单位是字节)

6fee0765913d4eab8c2bd1ab4a3876cd.jpg

 但是一般都编译器都是64位

4.sizeof  和strlen

sizeof:是c语言的保留字,也是操作符。可以用sizeof来求数据的字节数也就是数据所占内存的大小。"sizeof()"不会管括号内的数据是什么,它只计算数据所占内存的大小,如果括号内是表达式,那就计算表达式结果所占内存的大小。

比较下面代码

#include <stido.h>

int main( )

{

     int arr[ ] = {1, 2, 3, 4};

     printf("%d\n", sizeof(arr));

     return 0;

}

#include <stido.h>

in main( )

{

     int arr[ ]={1, 2, 3, 4};

     printf("%d\n", sizeof(arr[0]));

     return 0;

}

#include <stido.h>

int main( )

{

     int arr[ ]={1, 2, 3, 4};

     int sz = sizeof(arr) / sizeof(arr[0]);

     printf("%d\n",sz);

     return 0;

}

第一个代码求的是整个数组的所占的字节,

"sizeof(arr)"

第二个代码求的是一个数组所占的字节。

"sizeof(arr[0])"是下标为0的数组元素所占的字节。

第三个代码求的是数组元素的个数

"sizeof(arr) / sizeof(arr[0])"用整个数组所占字节除以一个数组元素所占的字节就可以获得这个数组的元素个数。

但是值得注意的是sizeof在计算字符串所占内存大小的时候会把"\0"也计算进去,不要忘记了\0,它是转义字符,它的大小是一个字节。

strlen:是一个库函数,是用来计算字符串的长度的,即计算字符数组的字符个数(不能用来计算其他类型数组的个数)。它遇到'\0'才会停止计算,没有就会一直计算下去,直到遇到'\0',也不包括'\0',注意和sizeof区分。使用时包含头文件"string.h"

如下代码所示

#include <stido.h>

#incude <string.h>

int main( )

{

     char arr[ ] = "abcde";

     printf("sizeof = %d\n", sizeof(arr));

     printf("strlen = %d\n",strlen(arr));

     return 0;

}

第一个打印出来的是6,第二个是5。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值