字符指针变量的注意问题:
指针就是地址。指针变量就是存储地址的变量。
1.关于对字符指针的赋值相关问题。
char *p;
p = “Hello world”;
是错误的,因为此时 p 并没有初始化,即没有一个地址,此时对p = “Hello world” 的赋值,即相当于将”Hello world”放在了 一个未知的地址,(这个地址也许是已经被占用的地址,就会覆盖了该地址的原内容。在我们定义一个字符数组时候 char str[] =”Hello world” 系统会为我们自动分配一个空闲的地址空间。)。
但是可以直接使用 char *p = “Hello World”。
也可以char str[] = “Hello world”;
char *p;
p = str;
2.对字符串的复制的时候,为了保险最后应该复制进去结束符 ‘\0’ 。
3.对于字符数组名 和 指针的关系:
char str[] = “Hello world”;
char *p;
p = str;
字符数组名是不可变的,而指针是可以改变的。即 str 永远是指向该字符串的首地址,不能重新赋值,比如自增自减运算都是没办法执行的。而指针则可以进行相关算数运算,而指向字符串的其他位置,可以自增自减。
以后再慢慢改进。
//将字符串a复制为字符串b
#include <stdio.h>
void copy_string(char *from,char *to);
int main(){
char str[]="I love China!";
printf("这个字符串是:%s\n",str);
printf("这个字符串的长度是:%d\n",sizeof(str));//sizeof(str) = 14,因为最后一有一个字符串结束符
const char *str1="I love China!"; //字符串常量 ,不能对字符串常量进行重新赋值
printf("这个字符串是:%s\n",str1);
printf("这个字符串的长度是:%d\n",sizeof(str));//sizeof(str) = 14,因为最后一有一个字符串结束符
char str2[14] = "I am a boy.";//不能在赋值语句中整体赋值。只能在定义时整体赋初值
printf("------------------------------------LINE-------------------------------------\n");
char stra[] = "I am a boy.";
char strb[20];
// printf("-------one---------\n");
// int ia=0;
// for(;str[ia]!='\0';ia++){
// strb[ia]=stra[ia];
// }
// strb[ia]='\0'; //为什么最后还要把\0加上去呢?----->因为
// printf("The string is : %s\n",strb);
printf("-------two---------\n");
copy_string(stra,strb);
printf("The string is : %s\n",strb);
printf("-------改变指针变量的值---------\n");
char *a_po=stra;
a_po=a_po+3;
printf("% s\n",a_po);
printf("-------字符数组的个元素的值是可以改变的 可以对他们再赋值---------\n");
stra[5]='\0';
printf("% s\n",stra);
printf("-------字符指针变量指向的字符串中的内容是不可以改变的再赋值 符串常量---------\n");
a_po[3]='\0';
printf("% s\n",a_po);
}
void copy_string(char *from,char *to){
/*常用
for(;*from!='\0';from++,to++){
*to=*from;
}
*to='\0';
*/
/*简化
while((*to++=*from++)!='\0'){
}
*to='\0';
*/
while(*from){//*from == '\0' == 0 ('\0'的ASCII码)
*to++=*from++;
}
*to='\0';
}