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