自己试着总结下C语言的指针(持续总结中)

指针

1.什么是地址
  • 程序中的数据不仅能存储在简单的变量中,还能存储在复杂的变量(例如:数组)
  • 而程序中的数据要存储,就要占用特定的内存空间,即某一类型的对象在内存中要有相应的位置,即地址。(就是数据要存储就一定要有地方存放自己的空间,类似家的感觉,一个数据对应一个家,家所在的地方就是地址)
  • 为了更清楚地说明地址和指针的概念,下面介绍了左值的概念。
2.左值
  1. 什么是左值

    • 任何一个指向能寻找出数据内存位置的表达式都可称为左值(例:简单变量就是左值),像x=12.5这样,“=”左边的x就叫左值。
    • 指定数组元素的选择表达式也是左值,像arr[3]=4,“=”左边的也是左值。
  2. C语言中很多内容不是左值,看书的我目前只知两点

    • 常量不是左值。
    • 算术表达式的值也不是左值。
  3. 左值的几个原则

    • (1)每个左值都存储在内存中,内存的每个字节都按顺序有一个相应的编号,相邻字节的编号相邻。内存的编号称为地址,因此,每一个左值都有其对应内存地址。
    • (2)只要声明了左值,尽管左值的内容会变(如"="右边的数值),但是地址是不会变的。
    • (3)不同类型的左值占用不同大小的内存,例如(short int短整型占2字节,而int整型占4字节)
    • (4)左值的地址本身也是数据,也可以在内存中进行操作和存储。(**下面我来尝试进行说明第四点原则的意思)
3.关于左值的第四个原则
  1. 首先,上图,图下进行说明,对后面指针的概念或许有点帮助

在这里插入图片描述

  1. 定义一个 int a,众所周知a占四个字节,所以就如图(a)一样,分别占用了2000、2001、2002、2003。

  2. 根据原则(4),a的首地址2000本身也是一个整型数据,所以2000也可以被存储在内存中,即2000也拥有自己的地址,如图(b),2000占用了4个字节,分别是3504、3505、3506、3507。

一.指针变量

1.声明指针变量
  • 声明指针的格式:base-type *pointer-variable;
  • 其中base-type代表指针所指向对象的类型就是(“=”右边定义的类型),pointer-variable就是指针变量的名字。
  • 例:int *p;(这是整型的指针变量)

​ int p2;(这是个普通整型变量)

2.指针变量的赋值
  1. 使用之前不需要定义,且必须赋给具体的值,未赋值无法使用。
  2. 给指针变量的赋值是赋值到地址上的。
  3. 首先变量的赋值格式如下:
int a;
int *p=&a

其中,a表示一个变量,&a表示变量a的地址,int (*p) = &a就表示把a的

地址赋给了p,把&a地址上的值赋值给了(*p)

举个例子:下面给段代码看看运行结果

#include<stdio.h>
#include<stdlib.h>
   int main(){
   int pa,pb;                    //普通变量
   int *ipointer_pa,*ipointer_pb;//声明两个指针变量
   scanf("%d%d",&pa,&pb);     //输入两个数
   ipointer_pa=&pa;           //将变量pa的地址赋值给指针变量ipointer_pa,下面同理
   ipointer_pb=&pb;
   printf("*ipointer_pa=%x,*ipointer_pb=%x",ipointer_pa,ipointer_pb);      //输出指针变量的地址
   printf("*ipointer_pa=%d,*ipointer_pb=%d",*ipointer_pa,*ipointer_pb);    //输出指针变量的值
   system("pause");
   return 0;
}

结果:在这里插入图片描述

其中ipointer_pa,ipointer_pb输出了地址,带上星号就输出了值

就是这样啦,休息休息,明天继续总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值