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


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


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值