C++中的数组指针
时间:2020-02-23 14:30:02 来源:igfitidea点击:
介绍
今天,在本教程中,我们将了解C++中的数组指针的概念。
指针算术
基本上,指针是存储特定数据类型的任何其他变量的地址的变量。
让我们来看一个简单的示例,以清楚地了解指针算法。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int i = 3, *x;
float j = 1.5, *y;
cout<<"Value of i= "<<i;
cout<<"\nValue of j= "<<j;
x = &i ;
y = &j ;
//Original pointer values
printf("\nOriginal address in x = %u",x);
printf("\nOriginal address in y = %u",y);
//Increasing pointer addresses
x++ ;
y++ ;
//After increment
printf("\nNew address in x = %u",x);
printf("\nNew address in y = %u",y);
cout<<"\n\nSize of int for this compiler = "<<sizeof(int);
cout<<"\nSize of float for this compiler = "<<sizeof(float);
return 0;
}
输出:
Value of i= 3 Value of j= 1.5 Original address in x = 7339516 Original address in y = 7339512 New address in x = 7339520 New address in y = 7339516 Size of int for this compiler = 4 Size of float for this compiler = 4
其中
- 我们首先用两个值分别初始化两个int和float变量i和j,
- 然后,将这两个变量的地址存储在第11行和第12行的两个指针x和y中,并将它们打印出来,
- 在那之后,我们增加两个指针,并查看输出的变化。
观察输出的第5行和第6行。
7339520是x加上4的原始值,而7339516是y加上4的原始值。
这是因为每次指针递增时,它都指向该类型的下一个位置。
这就是为什么当整数指针" x"增加时,它指向当前位置之后两个位置的地址,因为整数始终长4个字节(我们使用上面的sizeof()函数进行了检查)。
同样," y"指向当前位置之后4个位置的地址。
这是非常重要的结果,可以在将整个数组传递给函数时有效地使用。
注意:请勿尝试对指针执行以下操作,否则它们将永远无法工作,
- 两个指针相加,
- 指针与常数相乘,
- 用常数除指针。
C++中的指针和数组
现在,让我们深入了解如何使用指针访问数组元素。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int arr[4]= { 10, 20, 30, 40 };
int *ptr;
ptr=&arr[0]; //same as ptr=arr(arr is the base address)
//printing address and values of array
//elements using pointers
for(int i=0; i<4; i++)
{
printf("\nAddress = %u",(ptr+i));
cout<<"\tValue = "<<*(ptr+i);
}
return 0;
}
输出:
Address = 7339504 Value = 10 Address = 7339508 Value = 20 Address = 7339512 Value = 30 Address = 7339516 Value = 40
在上面的代码中,
- 首先,我们初始化一个大小为4的数组和一个相同类型的指针,
- 之后,我们将基地址或者数组的第一个元素的地址分配给指针(因为arr和arr [0]相同),ptr,
- 然后,我们使用指针打印出元素及其对应的地址。
如上一节所述,(ptr + i)是数组arr中第ith个元素的地址。
*(ptr + i)实际上是指地址(ptr + i)上的值。
因此,它为我们提供了第ith个元素的值。
使用指针将数组传递给函数
让我们看看如何在指针的帮助下将整个数组传递给函数,以使您对该主题有一个清晰的了解。
#include<iostream>
using namespace std;
void show(int *ptr, int n)
{
//printing the whole array
for(int i=0; i<n; i++)
{
cout<<"arr["<<i<<"] = "<<*(ptr+i)<<endl;
}
}
int main()
{
//Array initialisation
int arr[5]= { 12, 45, 86, 73, 87 };
show( arr, 5);
//function call with base address(arr) and no.of elements(6)
return 0;
}
输出:
arr[0] = 12 arr[1] = 45 arr[2] = 86 arr[3] = 73 arr[4] = 87
与前面的示例类似,这里我们在main()内部初始化一个数组,并将基地址arr和数组大小作为参数传递给我们之前定义的show()函数。
在调用show()函数之后,此时,指针ptr存储array(arr)的基地址,n为大小。
此外,我们使用" for"循环,使用指向数组的指针的概念来打印整个数组。

