C语言字符串指针

本文详细介绍了C语言中字符串的表示方法,包括字符数组和字符串指针。通过示例展示了如何使用字符串指针进行字符串复制和连接,并强调了字符串指针变量与字符数组在存储、赋值和地址可变性上的区别。此外,还探讨了在函数参数传递中使用字符串指针的应用。
摘要由CSDN通过智能技术生成

字符串的表示与引用

字符串的表示形式

在 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;
}

在这里插入图片描述

使用字符串指针变量与字符数组的区别

两者的区别:

  1. 存储内容不同
    字符串指针本身是一个变量,存储的是字符串的首地址。而字符串本身存放在以该首地址为首的一块连续的存储空间中并以‘\0’作为字符串的结束。字符数组中存储的是字符串本身。
  2. 赋值方式不同
    对字符串指针变量方式:
char *p="xianyu";
//或者
char *p;
p="xianyu";

而字符数组虽然可以在定义时初始化,但不能用赋值语句整体赋值。下面是非法用法/

char c[20];
c="xianyu";//非法用法

但是可以写成

static char c[]="xianyu"
  1. 地址是否可改变
    指针变量的值是可以改变的,字符串指针变量也不例外。字符串指针变量和字符数组名本质上都表示数组的首地址。但是指针可以通过一定的计算来改变自身的指向,而数组名不可以。

  2. 格式化的字符串

  3. 杜绝指针空指向

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼桨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值