C语言-指针基础

内存的存储

1、是以一个字节为一个编号,也就是8位合在一起给一个编号,不是0,1就给编号。内存分为很多个单元,每个单元就会分配一个编号。

地址

内存单元的一个编号。而指针和地址一个概念的。也就是说指针就是地址。

- 内存单元的编号,是一个从0开始的非负整数 
- 范围:cpu对内存是通过控制、数据、地址三条总线来进行控制的。

控制总线

cup会先把内存中的数据读入,进行处理后,在返回给内存,然后内存在把数据写入硬盘。

数据总线:

用于数据的传输,不管是把内存中的数据发送给cpu,还是把cpu的数据写如内存条,都是由数据线来完成的,但是数据传输的方向则是由控制线来控制的。

地址总线:

地址线则是确定数据要写入内存中的那个单元。所谓的一个单元就是一个字节

一条地址总线能控制2的1次方,一般的机器有32个地址线,最终能够控制2的32个单元,而每个单元是八位,而最终我们的内存能够存储2的32次方*8位。

变量

1、普通变量:只能存放一个值。

2、指针变量:同样是一个变量,但是指针变量存放其他变量的地址

代码示例

#include <stdio.h>
int main() {
   
    int num = 10;
    //需求:定义一个指针变量p 保存num的地址编号
    //定义中:*修饰p为指针变量 指针变量名为p 而不是*p
    int *p;

    //将指针变量p 与num建立关系
    p = &num;

    char ch = 'a';
    //需求:定义一个指针变量p1 保存ch的地址编号
    char *p1;
    //ch与p1建立关系
    p1 = &ch;
    return 0;
}

图示:

指针变量的使用

代码示例1

# include <stdio.h>

int main(void)
{
   
    int * p; //p是变量的名字, int * 表示p变量存放的是int类型变量的地址
    /*
     int * p; 不表示定义了一个名字叫做*p的变量
     int * p; 应该这样理解: p是变量名, p变量的数据类型是 int *类型
     所谓int * 类型 实际就是存放int变量地址的类型
     */

    int i = 3;
    int j;

    /*
	1. p保存了i的地址, 因此p指向i
	2. p不是i,i也不是p,更准确的说: 修改p的值不影响i的值,修改i的值也不会影响p的值.
	3. 如果一个指针变量指向了某个普通变量, 则*指针变量就完全等同于普通变量
    例子:
      如果p是个指针变量,并且p存放了普通变量i的地址,则p指向了普通变量i。
      *p 就完全等同于i,或者说:在所有出现*p的地方都可以替换成i。
       在所有出现i的地方都可以替换成*p,*p 就是以p的内容为地址的变量。
    */
    p = &i;

    j = *p;  //等价于 j = i;
    
    printf("i = %d, j = %d\n", i, j);

    return 0;
}

解析

p的内容是一个地址,在代码中,p的内容就是i的地址,*p其指向的变量当然就是i变量了。

注意
1*p代表的是p所指向的那个变量。在上代码中*p和i是同一个东西,但是*p和p不是同一个东西。
2int* p是一个声明,开头的int*是他的数据类型。P是变量的名字。不能理解我定义了一个整形变量,这个整形变量的名字叫做*p。所谓int*类型,实际就是存放int变量地址的类型。
3*p代表的是以p的内容为地址的变量。

代码示例2

# include <stdio.h>

int main(void) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值