9、指针

空扰寡人 提交于 2020-02-08 19:42:18

指针

指针类型用于表示内存地址,本质上是一个整数。对于指针类型的变量,可以使用星号操作,对指定的内存地址进行读写。

内存地址的表示

      变量和内存是对应的,每个变量都对应于若干字节的内存。当读取一个变量的值时,其实就是读取内存的值。当修改一个变量的时候,其实就是修改了内存的值。

例如,下面的定义的变量  a 在内存对应4个字节。

 

unsigned  int a = 0xA0A0A0A0;   // a 内存中的值:A0 A0 A0 A0
a = 0xB1B1B1B1;                 // a 内存中的值:B1 B1 B1 B1

 

把变量所对应的内存的地址,简称为变量的地址。变量的地址是一个整数,可以用操作符 & 来取得。例如:

    int a = 0;
    double b = 0;
    printf("%08x\n",a); // 把地址按十六进制打印
    printf("%08x\n",b); // 把地址按十六进制打印

 

指针的概念

      带星号的类型,称为指针类型。这种类型定义的变量,称为指针类型的变量,简称指针变量,或称为指针,例如:

#include<stdio.h>
int main()
{
    int a = 10;
    int b = 11;
    int* p = &a;    // p 指向变量 a 的地址
    p = &b;         // 修改 p 的值,现在指向了变量 b 的地址
    return 0;
}

 

星号操作

      在引入指针之后,可以使用另外一种办法来修改内存值:星号操作。可以使用星号操作符 * 作用与指针变量上,来直接读写内存的值。例如:

#include<stdio.h>
int main()
{
    int a = 0;
    int* p = &a;      // p 指向 a
    * p = 0xA0A0A0A0; // 写操作:修改 p 指向的内存的值
    * p = 0x13141516; // 写操作:修改 p 指向的内存的值
    int b = * p;      // 读操作:读取 p 指向的内存的值
    int c = * p + 2;  // 读操作:读取 p 指向的内存的值
    return 0;
}

 

指针与数组

      我们知道,数组在内存中就相当于一串紧密排列的变量。实际上数组名代表的就是这一块内存的首地址。

#include<stdio.h>
int main()
{
    int arr[4] = {1,2,3,4};
    int* p = arr;       // 把 arr 转换成 int*
    int* p2 = &arr[0];  // 第一个元素的地址
    // 指针 p 和 p2 都指向了数组的第一个元素的地址。
    return 0;
}

 

先记录那么多,需要了在增加

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!