指针的取地址 C

运算符 &
作用:获取变量的地址,它的操作数必需是变量。
输出变量的地址:
	    int i = 0;
	    printf("%x",&i);//输出变量的地址
	    也可以
	    int  i = 0;
	    int p;
	    p = (int)(&i);//强制转换
	    printf("%x",p);
地址的大小是否和int相同取决于编译器
	    int i;
	    printf("%d",&i);
x86 32位架构的 p(int类型)&i是四个字节;
x64 64位架构的 p(int类型)&i分别是8个字节 4个字节;
所以X86的地址大小和int是相同的数值
如何确定字节数呢?
利用sizeof(int)sizeof(&i)这两个的结果来计算。
对于&取地址符号来看有没有取地址对象的规则呢?
答案是当然有的
对于这样的情况
	    int i = 0;
	    int p;
	    p = (int)(&i);
	    p = (int)(&i+p);//错误
	    p = (int)(&++i);//错误
	    p = (int)(&i++);//错误
	    为啥这些都是错误的呢?是因为&的操作对象必需是明确的变量
在编译原理里面有说到过相邻两个变量的地址情况
如在
	    int i = 0;
	    int p;
	    printf("%p\n",&i);
	    printf("%p",&p);
	    
	    输出的结果是:006DFEFC	 
	    	        006DFEF8
	    我们观察一下 发现两个式子相减就是相当于C - 8 = 4;32位架构下sizeof(int) = 4;
	    两个地址是精密相连的。
	      
	  
	    



	    
	    

	    


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值