指针【C语言从入门到精通系列(八)】


1.指针

在内存空间中,每个字节都对应有一个编号,这个编号即为“地址”。也称“编指”。
一个变量可能占据多个字节,不论变量占了多少个字节,我们平时说的变量的地址,一般都指的是变量的起始地址
一个变量的地址,也可以称为这个变量的指针


1.1 指针变量

指针变量是一种特殊类型的变量,它存储了一个内存地址。这个内存地址可以指向另一个变量的位置。换句话说,指针变量存储了其他变量的内存地址,而不是直接存储变量的值。

只有指针变量才可以存地址。指针变量是特殊类型的变量,而并非常存储地址的常规变量。

指针的本质,是间接访问

指针 和 指针变量 不是同一个东西。

在64位应用程序中,寻址范围是8字节,即指针大小为8字节。
在32位应用程序中,寻址范围是4字节,即指针大小为4字节。
(考试时一般会说明程序的位数)


1.2 直接访问与间接访问

在C语言中,直接访问间接访问 是指访问内存中存储数据的两种不同方式。

直接访问是指按变量地址存取变量的方式。
(也可以描述为:通过 使用变量名 来直接访问该变量所在位置的值。)
例如,如果有一个整型变量x,可以直接使用x来访问其存储的整数值。

间接访问通过使用指针 来访问变量所在位置的值。指针存储变量地址的特殊变量类型。通过使用指针,可以间接地访问指针指向的变量的值。

定义指针变量的时候,在前边加一个*,表示定义的是指针变量,如:

int *num=100;

1.3 代码示例

试用代码进行举例举例:

先定义一个整型变量num,并给其赋值为10。
再定义一个指针变量ptr,并将以变量num的地址&num为值,对ptr其赋值。
(指针变量名是ptr,而不是*ptr。)
ptr前边的*,表示ptr是一个指针变量。同时,*也是取值运算符。

因此,可以理解为,这里一共涉及了二个变量:
变量num的值为10,变量ptr的值为变量num的地址。
且通过对ptr使用*运算符,可以间接得到变量num的值。

#include <stdio.h>

int main() {
   
    int num = 10;
    int *ptr = &num;
    printf("num=%d\n", num); // 直接访问
    printf("ptr=%d\n", ptr);
    printf("*ptr=%d\n", *ptr); // 间接访问
    printf("sizeof ptr=%d\n", sizeof(ptr)); //查看指针所占空间大小
    return 0;
}

输出结果:

num=10

ptr=6422036

*ptr=10

sizeof ptr=8

要点:

①定义指针变量时,一定要保持类型一致:整型变量的值复制给整型指针;字符变量的值赋值给字符指针。
②连续定义多个指针变量:int *a,*b,*c,而不能写成int *a,b,c
③指针变量的值,必须是地址,不能是随随便便的一个其他类型的值。


2.指针变量的应用场景

指针变量的使用场景主要在于传递偏移
认识指针变量的使用场景,更有利于加深对指针变量的理解。

2.1 传递

以下述代码为例,先说明一下值传递
需求:定义一个变量i,和一个change函数。要求change函数可以实现修改变量i的值。

#include <stdio.h>

void change(int j){
   
    j=5;
}

int main() {
   
    int i=10;
    printf("before change i=%d\n",i)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值