C语言指针用法总结——指针与数组

指针与数组

指针就是内存地址,每一个存储单元都有一个32位编码的内存地址,指针指向某一变量,即把该变量的内存地址赋值给该指针
首地址:一段内存空间中第一个存储单元的地址。存储单元指针变量的加减,以指针所指向的类型空间为单位进行偏移。


```c
#include<stdio.h>

int main()
{   
    //一维数组与指针
    // 1. 定义一个一维数组,数组名是这个数组的“首地址”。
    int a[5]={1,2,3,4,5};
    int i;
    printf("%d\n",a); // a指向a[0],a[0]int的元素,a的类型就是 int* 4,+1跨度是4个字节
    printf("%d\n",a+1);   
    printf("%d\n",&a); // &a这个地址指向整个数组,int(*)[5],+1跨度是整个数组的字节长度,即20个字节
    printf("%d\n",&a+1);  
    int *p = a;  //将a的地址赋给指针变量p,所以p指向a[0]

    //访问一维数组元素的方法
    //1、 下标法 
     for(i=0;i<5;i++)
    {
        printf("%d\n",a[i]);
    }
    //2、 指针法(一)
    for(i=0;i<5;i++)
    {
        printf("%d\n",*(p+i)); //p不会变,推荐使用这种方法
    }
    //2、 指针法(二)
    for(i=0;i<5;i++)
    {
        printf("%d\n",*p++);   //p会变!,不推荐
    }


    //二维数组与指针
    //定义一个二维数组,数组名b是第一个一维数组的内存地址!
    int b[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};  //b的类型是int* [4],+1跨度是16个字节
    printf("%d\n",b);
    printf("%d\n",b+1); 
    printf("%d\n",b[0]); //b[0]是第一个一维数组的第一个元素的内存地址!,类型是int* ,+1跨度是4个字节
    printf("%d\n",b[0]+1);
    printf("%d\n",&b); //&b这个地址指向整个数组,+1跨度是整个数组字节长度,即

    //访问二维数组的方法
    //一、 下标法
    printf("%d\n",b[1][2]);
    //二、 用行地址
    printf("%d\n",*(b[1]+2));    //b[m]+n是想取出元素的地址,加上*即可取出该元素。
    //三、 用数组名
    printf("%d\n",*(*(b+1)+2));  //b指向b[0],b+1指向b[1],类型是int* [4],
                                 //      *(b+1)即a[1]的首地址,类型是int* ,然后再进行偏移取值。
    //由法二与法三可以看出b[1]等价于*(b+1)
    //总结:二维数组数组名的意思
    //b[][] 是int类型 
    //b[]   是int*类型
    //b     是int*[4]类型, 多维数组以此类推。                       
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值