指针与字符串

一、字符串的表示形式

在 C++中,我们可以用两种方式访问字符串。

(1)用字符数组存放一个字符串,然后输出该字符串。

int main()
{
	char str[]="I love china! ";
	printf("%s\n",str);
} 
(2)用 字符指针指向一个字符串。

可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。

int main()
{
	char *str="I love china! ";
	printf("%s\n",str);
}
在这里,我们没有定义字符数组,而是在程序中定义了 一个字符指针变量 str,用字符串常量"I love China!",对它进行 初始化。C++对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来才存放该字符串常量。对字符指针变量初始化,实际上是把字符串 第 1 个元素的地址(即存放字符串的字符数组的首元素地址)赋给 str。有人认为 str 是一个字符串变量,以为在定义时把"I love China!"这几个字符赋给该字符串变量,这是不对的。

char *str="I love china! ";
等价于

char *str;//定义一个指针变量 
str="I love china! ";//把I的地址赋值给指针变量str
//指针变量只能存放地址 

可以看到,str 被定义为一个指针变量,指向字符型数据,请注意它只是指向了 一个字符变量或其他字符类型数据,不能同时指向多个字符数据,更不是把"I love China!"这些字符存放到 str 中 (指针变量只能存放地址)。只是把"I love China!"的第一个字符的地址赋给指针变量 str。

输出时,使用:

printf("%s\n",str); 
其中“%s”是输出 字符串时所用的格式符,在输出项中给出字符指针变量名,则系统先输出它所指向的一个字符数据,然后 自动是 str 加 1,使之指向下一个字符,然后再输出一个字符……如此知道遇到字符串结束标志“\0”为止。


注意:可以通过字符数组名或者字符指针变量输出一个字符串。而对一个数值型数组,是不能企图用数组名输出它的全部元素的。

例如:

int i[10];

……

printf(”%d\n”, i);

这样是不行的,只能逐个输出。显然 %s 可以对一个字符串进行整体的输入和输出。

二、字符串指针作函数参数

将一个字符串从一个函数传递到另外一个函数,可以用地址传递的方法,即用字符数组名作参数或用指向字符的指针变量做参数。在被调用的函数中可以改变字符串内容,在主调函数中可以得到改变了的字符串。

【例 8】输入一个长度最大为 100 的字符串,以字符数组的方式储存,再将字符串倒序储存,输出倒序储存后的字符串。(这里以字符指针为函数参数)


//! anihc evol I 
#include<cstdio>
#include<cstring>
using namespace std;
void swapp(char &a,char &b)//交换两个字符的位置
{
	char t;
	t=a;
	a=b;
	b=t;
} 

void work(char* str)
{
	int len=strlen(str);
	for(int i=0;i<len/2;i++) swapp(str[i],str[len-i-1]);
}
int main()
{
	char s[110];
	char *str=s;
	gets(s);
	work(str);
	printf("%s",s);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值