字符串的表示与引用
字符串的表示形式
在 C 语言中,可以用两种方法访问一个字符串。
1.用字符数组存放一个字符串,然后输出该字符串。
main(){
char string[]="I love China!";
printf("%s\n",string);
}
说明:和前面介绍的数组属性一样,string 是数组名,它代表字符数组的首地址。
2.用字符串指针指向一个字符串。
main(){
char *string="I love China!";
printf("%s\n",string);
}
字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。
如:
char c,*p=&c;
表示 p 是一个指向字符变量 c 的指针变量。
而:
char *s="C Language";
则表示 s 是一个指向字符串的指针变量。把字符串的首地址赋予 s。
字符串指针作为函数参数
字符串指针也可以作为函数参数。
1.用函数调用的方式实现字符串的复制
#include<stdio.h>
void string_copy(char *str_from,char *str_to)
{
int i=0;
for(; (*(str_to+i)=*(str_from+i))!='\0';i++); //循环体为空语句
}
main()
{
char arr_str1[15]=" i am xianyu";
char arr_str2[15];
string_copy(arr_str1,arr_str2); //数组名作为实参
printf("array_str2=%s\n",arr_str2);
}
2.用函数调用的方式实现字符串的连接
#include<stdio.h>
int main(void)
{
char str1[10],str2[10],str[20];
char *p1,*p2,*p;
int i=0;
p1=str1;
p2=str2;
p=str;
printf("请输入字符串1:\n");
gets(p1);
printf("请输入字符串2:\n");
gets(p2);
while(*p1!='\0') //复制 str1到 str2
{
*p=*p1;
p+=1;
p1+=1;
i++;
}
for(; *p2!='\0';p1++,p2++,p++) //复制str2到str*
*p=*p2;
*p='\0'; //结尾补"\0 "
printf("字符串1是: %s\n,字符串2是: %s\n连接后是: %s",str1,str2,str);
return 0;
}
使用字符串指针变量与字符数组的区别
两者的区别:
- 存储内容不同
字符串指针本身是一个变量,存储的是字符串的首地址。而字符串本身存放在以该首地址为首的一块连续的存储空间中并以‘\0’作为字符串的结束。字符数组中存储的是字符串本身。 - 赋值方式不同
对字符串指针变量方式:
char *p="xianyu";
//或者
char *p;
p="xianyu";
而字符数组虽然可以在定义时初始化,但不能用赋值语句整体赋值。下面是非法用法/
char c[20];
c="xianyu";//非法用法
但是可以写成
static char c[]="xianyu";
-
地址是否可改变
指针变量的值是可以改变的,字符串指针变量也不例外。字符串指针变量和字符数组名本质上都表示数组的首地址。但是指针可以通过一定的计算来改变自身的指向,而数组名不可以。 -
格式化的字符串
-
杜绝指针空指向