指针学习(5)----字符数组与指针

本文深入探讨了字符指针的概念及其在字符数组中的应用,包括如何定义和使用字符指针,以及通过实例演示了字符指针在字符串操作中的作用,如字符串连接等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符数组是一个一维数组,使用字符指针可以对字符数组进行引用,字符指针就是指向字符型内存空间的指针变量。

定义:char *p;

字符数组是一个字符串,通过字符指针可以指向一个字符串。

如:char *str="hello world";,这种方法是简单操作的。

老规矩还是看例子来理解一下:

#include <iostream>
using namespace std;

void main()
{
	char str1[50], str2[50];
	char* p1, * p2;
	p1 = str1;
	p2 = str2;
	cout << "p1指针指向的地址是:" << (long)p1 << endl;  //记录一下p1地址
	cout << "p2指针指向的地址是:" << (long)p2 << endl;  //记录一下p2地址

	cout << "输入字符串1:" << endl;
	gets_s(str1);
	cout << "输入字符串2:" << endl;
	gets_s(str2);
	while (*p1 != '\0')
	{
		cout << "p1指针指向的地址是:" << (long)p1 << endl; //记录p1的累加过程
		cout << "p1指针指向的值是:" << *p1 << endl;        //记录p1的对应的值
		p1++;
	}
	
	cout << "字符串1结束后此时p1的地址:" << (long)p1 << endl;  //p1累加结束之后此时的地址
	cout << "字符串1结束后此时p1的值:" << *p1 << endl;        //p1对应的值
	
	while (*p2 != '\0')
	{
		cout << "p2指针指向的地址是:" << (long)p2 << endl;//记录p2的累加过程
		cout << "p2指针指向的值是:" << *p2 << endl;       //记录p2的对应的值
		*p1++ = *p2++;
	}
		
	*p1 = '\0';
	cout << "连接起来的结果是:" << endl;
	puts(str1);
	cout << "p1指针指向的地址是:" << (long)(p1-1)<< endl;  //
	cout << "p1指针指向的值是:" <<  *(p1-1) << endl;
	cout << "p2指针指向的地址是:" << (long)(p2-1) << endl;
	cout << "p2指针指向的值是:" << *(p2-1) << endl;
}

首先就是声明字符数组和字符指针,在得到字符串1、2之后,如果字符串1的结束符不是0字结束符,那么对应的指针p1自加,这就保证了p1指针始终是在字符串1的终止端;同理将字符串2的指针p2指向的值赋值给p1指向的地址,使得两者连接起来,类似于stract函数。

这个函数我对各个地址进行追寻显示,得到的结果如图:

根据结果可以很容易的明白整个指针的动向,字符串1结束后此时的p1地址没有对应的值,这是因为对应的是结束符'\0',因此并未有出现值。

字符数组不算太难,利用字符指针对字符数组进行熟练操作是很重要的,不正之处希望大家指出,与君共勉之!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值