Java程序员.回头学C/C++ 之 C语言的指针

本文详细解释了指针的概念,并通过实例展示了如何使用指针与数组进行交互,以及指针的运算和作用。同时,文章还探讨了不同数据类型指针的长度,加深读者对指针在C语言中作用的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针是什么?   指针就是一个内存地址,代表的就是一块内存空间。
part 1: 初探指针
    // 定义一个 int类型的变量 i 值为5
    int i = 5;
    // &i 中的 &为取地址符,可以得到 i 的地址,%x 为十六进制输出
    printf("i的地址 %#x\n",&i); 

    // 指针变量 定义一个int* 类型的变量p  
    int* p;
    // 把 i 的地址给 p,现在 p 就存放的 i 的地址
    p = &i;

    printf("i=%d\n",i);
    // *p --> 当指针变量前面有*的时候,表示取这个指针变量所存放的地址里面对应的数据  
    printf("*p的值%d\n",*p); 
part 2: 指针占多少字节
    int i =3;
    double d = 3.141692;
    float f = 3.1423;
    char c ='B';
        
    int*  ip = &i;
    double* dp = &d;
    float* fp = &f;
    char* cp = &c;
    
    printf("int 类型指针变量的长度为 %d\n",sizeof(ip));  // --> 4
    printf("double 类型指针变量的长度为 %d\n",sizeof(dp)); // --> 4
    printf("float 类型指针变量的长度为 %d\n",sizeof(fp)); // --> 4
    printf("char 类型指针变量的长度为 %d\n",sizeof(cp)); // --> 4
part 3: 指针与数组
    // 数组是一块连续的内存空间  数组名 就是内存空间的首地址 
    // 数组名[i]  ==  *(数组名+i); 

    // 定义一个数组
    int arr[5] ={1,2,3,4,5};
    printf("a[0]=%d\n",arr[0]);  // --> 1
    printf("a[4]=%d\n",arr[4]);  // --> 5
    printf("a[4]=%d\n",*(arr+4)); // --> 5   
    // 问题: arr[i]  *(arr+i)  代表的是同一个变量么? 
    printf("arr[4]地址 = %#X\n",&arr[4]); // --> 0X28FF28
    printf("arr[4]地址 = %#X\n",arr+4); // --> 0X28FF28
    // 代表的是同一块内存空间 指向的是同一个变量
    
    // arr是一个什么东西呢?
    printf("arr = %#X\n",arr); 
            
    // 打印 数组的第一个元素的地址 
    printf("arr[0]地址 = %#X\n",&arr[0]); 
    
    // 发现每个内存地址是递增 4 的,为什么 因为 int类型 占用 4个字节        
    printf("arr[1]地址 = %#X\n",&arr[1]); 
    printf("arr[2]地址 = %#X\n",&arr[2]); 
part 4: 指针的运算
    // 指针的运算和数组都是紧密关联的 
    char* pChar = &arr[2];

    printf("pChar的内存地址:%#X,对于的值为:%c\n", pChar, *(pChar));
    printf("pChar + 1 的内存地址:%#X,对于的值为:%c\n", pChar + 1, *(pChar + 1));

    // pChar的内存地址:0X28FF22,对于的值为:c
    // pChar + 1 的内存地址:0X28FF23,对于的值为:d
    
    // 指针的运算 按照 约定好的数据类型, 偏移相对应的内存空间的大小 !





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值