数组,字符数组,字符串
1.数组名有两种情况代表整个数组
①sizeof(arr) 求整个数组字节的大小
②&arr+1 整个数组最后一个元素的下一个地址
2.访问数组元素的方法
①通过下标访问
int arr[5] = {1,2,3,4};
int a;
int b;
a = arr[0];
b = arr[1];
②通过指针访问
int arr[5] = {1,2,3,4};
int *p=arr;//
// *(p+3)是指arr[3], *p+3相当于 *p=1,,1+3=4 因此打印*p+3时为4
3.字符数组
未初始化的字符型数组默认*‘\0’*,整形数组默认为0,指针型数组默认为NULL;
‘\0’为字符数组的结束标志
①区分 0x00 , 0 , ‘0’, ‘\0’
char ch1=0x00;//打印值为0
char ch2=0;//打印值为0
char ch3='0';//打印值为ASC||码值 48
char ch4='\0';//打印值为0
数组的整体赋值只有一次机会初始化
char crr1[5]={'a','b','c','d'};//
char crr2[5]="abcd";//
char crr3[]="abcdef";//
4.字符串
字符串被定义初始化后 ,之后不能被修改
char *str = "tulun";
//*(str+1)='g';//erorr
printf("%s",str);
原因是因为字符串被分配在 rodata段, rodata段只能读取数据,不能修改;
%s可以打印字符串是因为字符串有‘\0’,%s遇到0之后停止。
5.其他
strlen 计算字符串长度的一个库函数,使用时要加头文件string.h 计算字符串长度不包括‘\0’
char str1[100]="abcdef";// 字节数 100 字符串长度 6
char *str2="abcdef";//字节数 4 字符串长度 6
char str3[]="abcdef";//字节数 7 字符串长度 6
char str[100]="abcdef\0xyz";//字节数 100 字符串长度 6
char *str5="abcdef\0xyz";//字节数 4 字符串长度 6
char str6[]="abcdef\0xyz";//字节数 11 字符串长度 6
char str7[]="abcdef\n\0";//字节数 9 字符串长度 7
char *str8="abcdef\n\0";//字节数 4 字符串长度 7