字符数组是一个一维数组,使用字符指针可以对字符数组进行引用,字符指针就是指向字符型内存空间的指针变量。
定义: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',因此并未有出现值。
字符数组不算太难,利用字符指针对字符数组进行熟练操作是很重要的,不正之处希望大家指出,与君共勉之!