数组的名字是数组的首地址,可以把他理解为一个指针,但是这个指针是:int * const 类型的,也就是说不能改变其指向的地址。也就是说不能动是固定的。那怎么办呢,不是白费了吗?
没关系,我们可以再定义一个指针,如下:
int num[100] = {0};
int* pnum = num;
这里的 pnum 是可以移动的,所以就可以指向数组num中的任意一个元素喽!例如遍历一个数组:
int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int* pnum = num;
for(int idx = 0; idx < 10; ++idx)
{
cout << *(pnum+idx) << endl;
}
访问数组的两种方法:
下标法:num[0];
指针法:*(pnum+idx)
用指针操作字符串数组:
定义两个字符数组输入如下:
char str1[50] = {0}, str2[] = “I Love cctry.com!”;
用指针的方式,实现将 str2 拷贝到 str1 中。
方法一:
char str1[50] = { 0 };
char str2[] = "I Love cctry.com!";
int length=strlen(str2);
for (int i=0; i <= length-1; i++)
{
str1[i] = str2[i];
}
方法二:
char str1[50] = { 0 };
char str2[] = "I Love cctry.com!";
char *pstr1 = str1;
char *pstr2 = str2;
for (; *pstr2 != 0; )
{
*(pstr1++) = *(pstr2++);
}
小作业:
输入一个字符串,例如:a123x456__17960?302ab5876
将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数。
#include <iostream>
using namespace std;
#include <string> //C++语法
int main()
{
int str1[50] = { 0 };
char str2[] = "a123x456__17960?302ab5876";
int *pstr1 = str1;
char *pstr2 = str2;
int flag = 1;
for (; *pstr2 != 0; pstr2++)
{
if (*(pstr2) >= '0'& *(pstr2) <= '9')
{
*(pstr1) = *(pstr1)*10+(*(pstr2)-48);
flag = 0;
}
else if (flag == 0)
{
flag = 1;
pstr1++;
}
}
int *pstri = str1;
for (int i = 0; *pstri != 0; i++, pstri++)
{
cout << "数组的第" << i << "位" << str1[i] << endl;
}
system("pause");
return 0;
}