C语言指针-字符串(三)

一、字符串与指针(谭浩强-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值