数组名有两种情况代表的是整个数组:
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'也算一个元素。