大魔王程序员生成记#05#C语言基础——数组2

14 篇文章 0 订阅

数组名有两种情况代表的是整个数组:

1.sizeof(arr):整个数组的字节大小

2.&arr+1:数组最后一个元素的后面

访问数组当中元素的方法:

1.可以通过下标去访问。

2.通过指针的形式访问。

在如下代码中

int arr[5]={1,2,3,4,5};
int *p=arr;
int a=*(p+3);
int a=*p+3;

*p=arr;相当于将数组首元素的首地址付给了指针变量p。

a=*(p+3);相当于a=arr[3];

a=*p+3;相当于指针变量p所指向的首元素加3,即a=a[0]+3==1+3==4;

在如下代码中

printf("%d\n",&arr);
printf("%d ",&arr+1);
printf("%d ",&arr[0]);
printf("%d ",&arr[4]);
printf("%d ",arr);

&arr:代表首元素的首地址;

&arr+1:代表arr数组最后一个元素的后面;

&arr[0]:代表首元素的地址;

arr:代表数组的首地址;

即&arr==&arr[0]==arr;只有&arr+1不同。

字符数组 :

用来存放字符数据的数组是字符型数组。字符型数组中的一个元素存放一个字符。如:

char crr[5]={'a','b','c','d','e'};

在如下代码中

char crr[5]={'a','b','c','d'};
char crr2[5]="abcd";
char crr3[]="abcdef";
char crr4[10]="abcdef";
printf("%d\n",sizeof(crr));
printf("%d\n",sizeof(crr2));
printf("%d\n",sizeof(crr3));
printf("%d\n",sizeof(crr4));

运行结果为:

注:1.字符数组  如果只写了部分(一个元素中5个元素只写了4个元素)默认最后一个是‘\0'(结束标志)。

2.字符数组中在字符串后面默认会加'\0'。

在如下代码中

char crr[5]={'a','b','c','d','e'};
char crr2[5]="abcd";
char crr3[]="abcdef";
char crr4[10]="abcdef";
printf("%s\n",crr);
printf("%s\n",crr2);
printf("%s\n",crr3);
printf("%s\n",crr4);

crr不能够打印出来,原因是%s遇到'\0'才停止,数组放满没就有'\0';其他可以正常打印。

在如下代码中

char crr5[10]=crr4;

系统会报错,原因是数组的整体赋值只有一次机会  初始化

在如下代码中

char *str="tulun";
*(str+1)='g';

系统会报错,原因是字符串不能被修改,字符串背存储在rodata段(ro==readonly),即只读段     只能读,不能写。

 提问,在如下代码中

char ch1=0x00;
char ch2='0';
char ch3=0;
char ch4='\0';

'0'和0,和'\0'有什么区别?

ch1:表示16进制的0;

ch2:表示字符0,即数字78;

ch3:表示十进制的0;

ch4:表示ASCII码的0;

即输出结果ch1==ch3==ch4;

提问,在如下代码中

char str[100] = "abcdef";
char *str2 = "abcdef";
char str3[] = "abcdef";
char str4[100] = "abcdef\0xyz";
char *str5 = "abcdef\0xyz";
char str6[] = "abcdef\0xyz";
char str7[] = "abcdef\n\0";
char *str8 = "abcdef\n\0";
printf("%d,%d\n",sizeof(str),strlen(str));
printf("%d,%d\n",sizeof(str2),strlen(str2));
printf("%d,%d\n",sizeof(str3),strlen(str3));
printf("%d,%d\n",sizeof(str4),strlen(str4));
printf("%d,%d\n",sizeof(str5),strlen(str5));
printf("%d,%d\n",sizeof(str6),strlen(str6));
printf("%d,%d\n",sizeof(str7),strlen(str7));
printf("%d,%d\n",sizeof(str8),strlen(str8));

输出结果是什么?

运行结果为:

注: strlen():求字符串的长度,不包括'\0'(到'\0'就停)。  需要添加头文件#include<string.h>

提示:

字符数组  如果只写了部分(一个元素中5个元素只写了4个元素)默认最后一个是‘\0'(结束标志)。

所有类型的指针都占4字节。

字符数组中在字符串后面默认会加'\0'。字符串中出现'\0'也会在最后再加上一个'\0'。

在字符数组的字符串中'\n'和'\0'也算一个元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值