C语言-数组与指针 字符与字符串

时间:2023-03-10 00:54:50
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