C++ 指针 <--> 数组
C++ 指针 <--> 数组C++ 中,指针和数组关系密切,几乎可以互换使用。
数组名可以看成常量指针,对于一维数组,数组名是数组的起始地址,也就是第 0 个元素的地址。
假设有指针 p 和数组 a,如果执行了 p = a,则指针 p 和数组 a 是等价的,可以用 p 访问数组 a 的任何元素。
指针运算
指针保存的是一个地址,地址是一个整型数,因此可以对指针进行算术运算,但仅有加减运算是有意义的。
指针的加减运算与数组有密切的关系。
[*]指针 + 1 (p + 1)表示数组中指针指向元素的下一个元素的地址。
[*]指针 - 1 (p - 1)表示数组中指针指向元素的上一个元素的地址。
[*]第 i 个元素的地址可表示为 p + i,第 i 个元素的值可表示为 *(p + i)。
例如,输出数组 a 的前十个元素。
方法 1:
#include <iostream>
using namespace std;
int main()
{
int *p, a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
for (i = 0; i < 10; i++)
cout << a << " ";
return 0;
}
方法 2:
#include <iostream>
using namespace std;
int main()
{
int *p, a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
for (i = 0; i < 10; i++)
cout << *(a + i) << " ";
return 0;
}
方法 3:
#include <iostream>
using namespace std;
int main()
{
int *p, a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (p = a; p < a + 10; p++)
cout << *p << " ";
return 0;
}
方法 4:
#include <iostream>
using namespace std;
int main()
{
int *p, a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
for (p = a, i = 0; i < 10; i++)
cout << *(p + i) << " ";
return 0;
}
方法 5:
#include <iostream>
using namespace std;
int main()
{
int *p, a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
for (p = a, i = 0; i < 10; i++)
cout << p << " ";
return 0;
}
执行结果均为 1 2 3 4 5 6 7 8 9 10。
指针和数组的区别
虽然通过指针可以访问数组,但两者本质确实不同的。
在定义数组时为数组的各个元素分配了全部的存储区,而在定义指针时,仅仅分配四个字节的存储区存放指针地址。
页:
[1]