数组+字符串总结

一、    数组(数组是顺序表)

注意:数组越界编译器不检查,返回的是垃圾值;

1int a[10]

1)类型名(int[10])+ 变量名(arr)

2sizeof(a)=数组长度40

3)数组一旦确定,数组大小就确定了

2、数组初始化

int a[10]        定义在函数内,数组内元素为垃圾值;

int a[10]={}     数组内元素为0;

int a[10]={1,}    数组不完全初始化,a[0]=1,其余为0

int a[]={1,2,4}   数组完全初始化;

int a[10]={[3]=1}   数组可以指定元素初始化;

其余类型数组初始化同上

3int a[10]

1)数组名是地址常量,不能做左值;

2)数组名不能++++本质也是赋值运算,数组名是地址常量,不能改变,并且也没有这么多字节的数字赋值。

2)左值为存储空间,右值为具体的内容(值),数组名作为右值,是地址值(为首元素首地址)

4a[10]  a&a(虽然两个地址值相同,但是代表意思不同)

1a为数组首元素首地址(&a[0]相同)&a为数组首地址(&a&a+1相差一个数组大小)

2int (*p1)[10] =&arr

              int*p2=arr

 

5 数组名做形参

例如: void fun (int a[10])

1)数组名作为形式参数退化为指针,fun (int a[10])fun (int a[])fun (int *a)作用一样,a都做为指针,sizeof(a)=4(32位系统)

2)数组名作为形参要加上数组大小fun (int a[]10)

 

二、    字符串

1、定义

1C语言里没有字符串的原生类型,如stringC++,所有的字符串都是以字符数组的形式存储在内存中。

2)字符串相当于提供了一个首地址,结束'\0'.整个区间就是字符串(不包含'\0')

2char str[] ="hello"

sizeof(str)=6(数组长度=字符串长度+11’\0’)

strlen(str)=5strlen以传入的地址为开始,统计长度,直至遇到’\0’为止,不包含’\0’长度)

3、对比

char arr1[]={‘a’,’b’,’c’};    字符数组(不是字符串)

char  arr2[]={“abc”};      字符串

char  arr3[]=”abc”;       字符串

sizeof(arr1)=3

sizeof(arr2)=4

sizeof(arr3)=4

4、字符串常量

char * P1=’abc’;

char* P2=’abc’;

1p1==p2

2)字符串常量在代码段,是只读的(常量区),不能被改变。

*p1=’m’(是错误的,不能改变字符串常量)

3*p1==*p2==*”abc”;

5、字符串与字符数组

1)字符串本质都是字符数组;

2)只有以0结尾的字符数组才是字符串。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值