字符串的3种表示
1. char str[]
2. char *str
3. 静态 "Hello,world!"
1.char str[]="Hello,world!"
str[0]='a' //可以的
2.char *str ;
str = "Hello,world!" //
str[0] = 'a'; //不可以
3.char *str = new char [13];
str = "Hello,world!"
str[0] = 'a'; //不可以
4.char *str = new char [13];
strcpy(str,"Hello,world!");
str[0] = 'a'; //可以
5.char *str = new char [13];
str = "Hello!";
strcpy(str,"Hello,world!");
str[0] = 'a'; //不可以
原因:
str[] 是分配了一组空间,其分别存放每个字符
*str用=表示指向这个静态字符串,不能修改
*str分配了空间,用strcpy,为每个空间都指向字符,修改指向某个字符里面存储的可以
str[],*str
str[i],某个元素的地址
&str[i],某个元素的地址
void * 对应 str,或者&str[i]
cout是可以输出没有分配空间的指针
strcpy,memcpy之类,必须先分配空间
memcpy(void *dest,void *src)
dest必须先分配空间
src 可以先不分配空间
char *str1,*str2,*str3,*str4;
str1 = new char [20];
str2 = new char [20];
str3 = "Hello,world!";
str4 = str3;
memcpy(str1,str3,13);
memcpy(str2,str4,13); //都是可以的
struct abc{int a;int b;};
abc *a1,*a2;
a1 = (abc *)malloc(sizeof(abc));//必须要这句
a1->a = 1;
a1->b = 1;
a2 = (abc *)malloc(sizeof(abc));
memcpy(a2,a1,sizeof(abc));
char *str...memcpy(str,...)
char str[]..memcpy(str,...)
char str[]..memcpy(&str[0]..)
不需要转换成memcpy((void *)str,..)
struct str ...memcpy(&str,..)