C语言-数组与指针 字符与字符串
1 字符与字符串:char c='a'而不能写出char c="a" //字符变量用单引号'',而字符串用双引号。
2 字符数组与字符指针的初始化:
char s[10]={0}, *p
strcpy(s,"hello word\n");或者p="hello word\n";
而不能用s="hello word\n"y因s数组名表示数组的首地址是个常量。
字符数组的0初始化:
方法1:char s[10]={0};
方法2: memset(s,0,10);
方法3: for循环中初始化:
int i,s[10],*p; 或者 int i,s[10],*p;
p=s for(p=a;p<a+10;p++)
for(i=0;i<10;i++) scanf("%d",p);
scanf(:%d”,p++);
而不能:
int i,a[10];
for (i=0;i<10;i++)
scanf("%d",a++);//数组的首地址是不能改变的。
4字符数组 字符指针 字符串 strlen() sizeof
4.1字符数组 :char a[]="string"或者={‘s','t','r','i','n','g'}
4.2字符串:系统遇到字符串都会在末尾加上结束符“\0”
4.3 strlen(char *str):计算遇到“\0"之前的字符串的长度的函数,参数必须是字符串,计算的结果不包括结束符“\0",因此计算的是字符串中字符的个数。
4.4 sizeof():计算常量或变量存储类型的字节数,它是宏计算符不是函数。
4.5 字符指针:char *s 指针通常为4个字节
所以 char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符,字符占1个字节
char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前,不包括结束符
int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4,32位机种int整形数据占4个字节
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的
char q[]="abc";
char p[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2