C语言--&运算符取得变量的地址

&的作用是获得变量的地址,他的操作对象必须是变量                                                                                                                                                                                                                                                                                数组变量是特殊的指针   : 数组变量本身表达地址,所以,int a[10];int*p=a; //这里无需用&取地址

            但是数组的单元表达的是变量,需要用&取地址

            a==&a[0]

            []运算符可以对数组做,也可以对指针做:p[0]==a[0]

            *运算符可以对指针做,也可以对数组做:*a=25;  //指的是a[0]=25                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              以下面一段代码为解释:

复制代码
#include <stdio.h>
int main(void)
{
    /**
        %d是十进制 
        %o是八进制   约定俗成的规律在使用的时候加前缀 0 
        %x是读入十六进制整数    约定俗成的规律在使用的时候加前缀 0x 
        
        %p为输出地址专用,读入指针 
        
        &取地址符,在取地址符右边必须有明确的变量 &i++这种样子的就不行 
    */
    int i=0;
    int p;
    p=(int)&i; 
    
    printf("0x%x\n",&i);  //0x62fe1c,虽然输出成功了,但是输出地址不应该用%f,应该用%p
    printf("%p\n",&i);   //000000000062FE1C   指针形式十六进制表示的地址  
    printf("0x%x\n",p);  //0x62fe1c
    printf("%lu\n",sizeof(int)); //4
    printf("%lu\n",sizeof(&i)); //8   是64位架构 ,在32位架构里面他们是相同的 
    
    int j=0;
    int k;
    printf("%p\n",&j); //000000000062FE14  
    printf("%p\n",&i); //000000000062FE18   先写的变量地址更高,因为自上向下分配空间,是紧挨着的 
    printf("%p\n\n",&k); //000000000062FE10
    
    
    //以下为取数组的地址
    int z[10];
    
    printf("%p\n",&z);  //000000000062FDE0
    printf("%p\n",z);   //000000000062FDE0
    printf("%p\n",&z[0]);  //000000000062FDE0
    printf("%p\n",&z[1]);  //000000000062FDE4
    printf("%p\n",&z[3]);  //000000000062FDEC  十六进制数的基数是16,采用的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
    
    return 0;
 } 
复制代码

 

posted @   周周周777  阅读(436)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示