定义一个只有两个元素的数组a[2] = { 5,3 }; 指针变量p取第一个元素 5 地址
猜想:定义一个指针变量q=p+1,指针变量p加1后 即指向第二块地址,即第二个元素 3 的地址
【即:int* q = p+1;】
int main() {
int a[2] = { 5,3 };
int* p = &a[0];
int* q = p + 1;
printf("p地址:%p\n", p);
printf("q地址:%p\n", q);
printf("首地址%d\n", &a[0]);
printf("第一个元素值:%d\n", *p);
printf("次地址%d\n", &a[1]);
printf("第二个元素值:%d\n", *q);
system("pause");
return 0;
}
调试截图表明: q确实指向第二个元素的地址。
结论:指针变量每加1后,表示的就是数组的下一个元素的地址。不论是int*, char*, double*定义的变量都是64位地址,占8个字节
(在64位操作系统中占8个字节, 32为操作系统中占 4个字节)
但是char*类型p加1后,地址大小加1. int*类型p加1后,地址大小加4 double*类型加1后,地址大小加8;
注: *(p+1) => p[1] => arr[1]
函数指针
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。