一、字符串与指针(谭浩强-C程序设计第三版10.4 P251)
在C程序中,可以用两种方法访问一个字符串①用字符数组存放一个字符串,然后输出该字符串。(下面例子中的 char a[]="I love China!",输出用%s来输出)。②用字符指针指向一个字符串。(下面例子是指针定义一个字符串char *b="I love China!")。
#include<stdio.h>
void main()
{
char a[]="I love China!";//第一种定义一个字符串
char *b="I love China!";//第二种指针定义一个字符串
printf("%s\n",a);
printf("%s\n",b);
}
方法②对于字符指针变量b初始化,实际上是把字符串第1个元素的地址(存放字符串的字符首地址赋给b)char *b="I love China!"等价于 char *b; b="I love China!" 这两句。注意字符串最后被自动加'\0' 注意!通过字符数组名或者字符指针可以输出一个字符串,对于一个数值型数组,是不能企图用数组名输出它全部元素的。int i[10]... printf("%d",i);是不行的。
#include<stdio.h>
void main()
{
char c[]="china";
char *ptr=c;
char x='m';
int i;
printf("%c \n",x);
printf("%s \n",c); //打印字符串china
printf("%c \n",*(ptr+1));//打印字符h
for(i=0;i<6;i++)
{
printf("%c ",*(ptr+i));//注意 输出是china
printf("--%c \n",*ptr+i);//注意 输出是cdefgh
}
//下面是计算输入字符串长度的函数
int j;
char sc[100];
printf("输入字符串:");
scanf("%s",sc);
printf("输入字符串是%s-->",sc);
for(j=0;sc[j]!='\0';++j);//此处分号不能省略
printf("长度是%d",j);
}
二、字符指针作函数参数(10.4.2)
字符数组作参数-交换两个字符串
#include<stdio.h>
void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!='\0')
{
to[i]=from[i];
i++;
}
to[i]='\0'; //后面的空字符串需要打印
}
void main()
{
char a[]="I am a teacher";
char b[]="I am a student";
printf("string a %s \n",a);
printf("string b %s \n",b);
copy_string(a,b);
printf("string a %s\nstring b %s \n",a,b);
}
形参用字符指针变量-交换两个字符串
#include<stdio.h>
void copy_string(char *from_a,char *to_b)
{
for(;*from_a!='\0';from_a++,to_b++)
*to_b=*from_a;
*to_b='\0'; //后面的空字符串需要打印
}
void main()
{
char from[]="I am a teacher";
char to[]="I am a student";
char *a=from,*b=to;
printf("拷贝前b是 %s \n",b);
copy_string(a,b);
printf("拷贝后b是 %s \n",b);
printf("string a %s\nstring b %s \n",a,b);
}
三、字符串定义的关键字const的理解
const char *p 和 char * const p有什么区别,前者内容不能变,地址可以变,常用于字符串,后者内容可以变变,但是地址不能变,常用于硬件资源。
#include<stdio.h>
void main()
{
char *p ="hello world";//其实是const char *p ="hello world";
char buf[]={"hello world"}; //上下两个赋值有是区别
//无法用*P='x';来修改首字符
char *p2=buf;
printf("the *P is %x the p is ----- *P is %s\n",*p,p);
printf("the buf address is %p---world is %s\n",&buf[0],buf);
*p2='x'; //修改字符的首地址
printf("the P2 address is %p---world is %s\n",p2,p2);//找出首字符,并取出字符串
printf("the P2 address is %p---world is %c\n",p2,p2[1]);//取出第二个字符
}
体会函数内指针的传递
友情提示:技术交流及代码分享QQ群号码:255864236