C语言指针(知识点整理)

目录

 

1. 地址和指针(非官方版本)

2. 指针变量的声明

3. 指针运算符

4. 指针与数组

1. 地址和指针(非官方版本)

在了解指针之前,首先要了解地址,我们平时的每一个变量,都是被储存在内存中的,每个内存又有一个编号,这个编号就被称为地址,如果把学校的宿舍楼理解成电脑的内存,整型变量理解为男生宿舍,把浮点型变量理解为女生宿舍,那么我们自己就相当于被存在对应变量类型中的一个值,而我自己被存在我的宿舍,我宿舍的宿舍号就相当于我这个变量的地址,存在对应的指针型变量当中。

在刚刚的比喻中,int相当于男生宿舍,int YX=10,就相当于把我自己赋值为10,int *p,就相当于我定义了一个指针型变量用来存放刚刚的门牌号的,p=&YX(&为取地址符,后边指针运算符会讲到),就相当于把我自己宿舍的门牌号存到p,这样就可以查到门牌号即变量地址了。
 

2. 指针变量的声明

    int *a; ///定义了一个整形的指针变量a
    char *b;///定义了一个字符型指针变量b
    int *c,d;///不会报错,但是相当于定义了一个整型的指针变量c和整型变量d

3. 指针运算符

*号代表取值运算符,后边跟着的一定是一个指针型的变量

&号代表取地址运算符,后边跟着的一定是一个数值型的变量(此处的数值类型取决于你定义的数据类型)

    int a=10,b=20;///定义a,b两个整形变量数值分别为10,20
    int *pa,*pb;  ///定义两个整型的指针变量pa,pb
    pa = &a;pb = &b;
    /**关于取地址运算符的应用,我们取a这个整型变量的地址,赋给pa,
    同理取b这个整型变量的地址,赋给pb,
    现在pa对应的就是a这个值的门牌号*/
    printf("%d\n",*pa + *pb);
    /**关于取值运算符的应用,我们取pa这个地址存的值10(原来a的值)
    加上pb这个地址存的值20(原来b的值),输出30;
    */

关于跟指针有关的相关运算,切记等号左右两边数据类型一定要保持一致,

即左边是指针右边必是指针,左边是数值,右边必是数值;

比如 int *pa;int a; 我定义了pa这个指针以及a这个数值;

在运算中

pa 代表地址

a代表数值

*pa代表数值

&a代表地址

&pa,*a以及等号两边类型不同均会报错

4. 指针与数组

要理解数组与指针的关系,就首先要理解数组在在内存中储存方式,数组是顺序储存结构,就相当于对于a[10]这个数组,a[0]的地址(门牌号)为100,那么a[1]的门牌号就是101,a[2]就是102,以此类推;

那么我们理解了数组的储存方式,就可以看看数组跟指针有什么关系;

我们可以定义一个int型的*a,此时,a代表的是a[0]在内存中的地址,*a就表示a[0]的值,
由顺序结构可知 a+1 为a[1]的地址,则*(a+1)表示a[1]的值,以此类推。

    int *a; ///定义了一个整型的指针变量,可看做a数组第一个值得地址,即a[0]的地址
    for(int i=0;i<10;i++){
        *(a+i) = i;
        /**目的,将a[0]~a[9]分别赋值为0~9;
        数组的每个地址就相当于a+i,赋值就要用取值运算符对改地址存的值进行改变;
        即 *(a+i) = i;*/
    }
    for(int i=0;i<10;i++){
        printf("%d\n",a[i]);
        ///同样可以用a[i]的形式操作数组;
    }

 

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值