数组名与数组名的地址是一个意思

以前从来没注意这点:数组名和&数组名的意义一样,都表示这个数组的地址,即数组第一个元素的地址

地址就是地址,不是指针,没有指向的意思。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int array[16]={1,2,3,4};
    printf("array's address is %x/n",array);
    printf("array's address is %x/n",&array);
    int *p,**dd;
    p=array;
    printf("p is %d/n",*p);
    p=&array;
    printf("p is %d/n",*p);
    dd=&array;
    printf("dd is %d/n",**dd);


    return 0;
}

编译时:

main.c:12: warning: assignment from incompatible pointer type
main.c:14: warning: assignment from incompatible pointer type

line 12的warning是因为&array的类型不明确,应该改为:p=(int *)&array

相应line 14应该改为dd=(int **)&array

但最后一句是不对的,会造成segment default

这句的原意是取数组的地址的地址给dd,但对于array来说&array和array一样,没有了再上一层的地址。

这主要是对数组和指针使用不灵活和思想僵化造成的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值