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"循环,使用指向数组的指针的概念来打印整个数组。