函数名、数组名实际上是地址与地址的真正区别


#include 

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和指针》这本书中,“取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量值的指针。”。


你可能感兴趣的:(C语言规则)