指向数组的指针
考虑以下程序:
#include<stdio.h>
int main()
{
int arr[5] = { 1, 2, 3, 4, 5 };
int *ptr = arr;
printf("%pn", ptr);
return 0;
}
在此程序中,我们有一个指针ptr指向数组的第0个元素。同样,我们也可以声明一个指针,该指针可以指向整个数组,而不是指向数组的一个元素。在讨论多维数组时,此指针很有用。句法:
data_type(* var_name)[size_of_array] ;
例:
int(* ptr)[10];
这里PTR是指针可以指向的10个整数的数组。由于下标的优先级比间接的优先级高,因此有必要将间接操作符和指针名称括在括号内。在这里,ptr的类型是“指向10个整数的数组的指针”。注意:指向数组第0个元素的指针与指向整个数组的指针完全不同。以下程序显示了这一点:
C ++
#include <iostream>
using namespace std;
int main()
{
int *p;
int (*ptr)[5];
int arr[5];
p = arr;
ptr = &arr;
cout << "p =" << p <<", ptr = "<< ptr<< endl;
p++;
ptr++;
cout << "p =" << p <<", ptr = "<< ptr<< endl;
return 0;
}
C
#include<stdio.h>
int main()
{
int *p;
int (*ptr)[5];
int arr[5];
p = arr;
ptr = &arr;
printf("p = %p, ptr = %pn", p, ptr);
p++;
ptr++
printf("p = %p, ptr = %pn", p, ptr);
return 0;
输出:
p = 0x7fff4f32fd50,ptr = 0x7fff4f32fd50
p = 0x7fff4f32fd54,ptr = 0x7fff4f32fd64
p:是指向数组arr的第0个元素的指针,而ptr是指向整个数组arr的指针。
- p的基本类型为int,而ptr的基本类型为“ 5个整数的数组”。
- 我们知道指针算术是相对于基本大小执行的,因此,如果我们编写ptr ++,则指针ptr将向前移20个字节。