#include <stdio.h>
int function_name(int number)
{
printf("in function_name() %d\n", number);
return 0;
}
int main(void)
{
int array[10] = {2};
int *ptr1 = &array;
int *ptr2 = array;
int (*func1)(int) = &function_name;
int (*func2)(int) = function_name;
printf("*ptr1 %d\n", *ptr1);
printf("*ptr2 %d\n", *ptr2);
func1(5);
func2(5);
return 0;
}
有上边的例子可知:
数组名 array 与数组名的取地址 &array
函数名 function_name 与函数名的取地址 &function_name
array 实际上是一个地址,&array等同于这个地址
function_name实际上是一个地址, &function_name等同于这个地址。
《C和指针》这本书中,”初始化表达式中的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针。
&操作符只是显式地说明了编译器将隐式执行的任务“。
《C和指针》这本书中,“取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量值的指针。”。