指针入门基础

指针与内存

  • 一、谈谈内存
  • 二、开始指针
    • 1.指针声明
    • 2.如何阅读指针
    • 3.指针赋值
    • 4.使用 “ * ”解引指针
    • 5.NULL的概念
  • 三、总结

通过对这一节的学习,了解了对指针的认识

1、为什么要用指针?

a.指针运行很快;指针接近与硬件,编译器更容易的把指针操作翻译为机器码呀,指针附带的开销更小

b.指针操作很直接;因为是直接去操作地址,那就可以直接访问地址里的值,就不用使用太多的变量透过函数层层传递

c.指针可以节约开销;因为不用使用多个变量相互传值,不用申请太多的临时变量,传递数据结构更节约

暂时我知道有这些;但很多优点其实都是从这个定义里给提取出来的。

2、指针是什么?

a.指针是一个变量;

b.指针变量里装的值是一个地址的值;

c.我们可以根据地址的值去找到那个地址的数据

3、大概怎么去用指针?

–由于C语言标准;只能先定义变量,才能使用变量;直白一些,先去申请,才能拿到空间资源

a.定义指针

b.给指针初始化

c.使用指针

一、谈谈内存

C程序是在编译后,会以三种形式使用内存;

1、先谈谈C程序文件和编译后文件是什么?

我的理解:

C程序文件:文本文件;这是一个逻辑上处理数据的规范,里面定义了用什么来存储数据、计算数据等规则;

编译后文件:二进制文件;可以运行在操作系统上面,在启动这个二进制文件的时候,操作系统给这个二进制文件拷贝到内存里,变为一个进程,操作系统按照这个二进制文件里的信息,由操作系统分配内存资源(之前的定义变量啊,不同类型的变量需要大小也不一样的哈)给这个进程使用,然后就是这个进程自己运行,但受到操作系统的调度。

内存空间是由程序的变量来使用的

C语言程序文件使用三个大类的:

全局/静态内存:

由用户定义的全局变量、静态变量都分配在这里,全局变量是在程序运行时分配的,程序生命周期都可以使用这些变量,

所有函数都能访问全局变量,而静态变量就只能访问自己函数的作用域;

自动内存:

是函数内部声明的,在函数被调用时才分配,被调用的函数运行结束之后,由操作系统把这些空间给回收了;

动态内存:

是由用户自定义的主动申请空间,使用完成后必须要用户释放掉后,操作系统才能回收使用内存数据;作用域是由这个引用该内存的指针决定的;

作用域 生命周期
全局内存 整个程序文件 应用程序的整个生命周期
静态内存 声明它的函数内部 应用程序的整个生命周期
自动内存 声明它的函数内部 限制在函数的执行时间内
动态内存 由引用内存这个指针 申请开始—内存释放

二、开始指针

1.指针声明

指针是变量,是变量就有类型区分;

指针声明: 数据类型 *指针变量名

!这个 ‘ * ’ 的位置无关紧要哈,只要在数据类型和指针变量名之间就好了

#include 

int main(void)
{
    int *ptr1;        //等价于后两种写法  int* ptr4; int* ptr4;
    char *ptr2;       //等价于后两种写法  char* ptr4; char* ptr4;
    float *ptr3;      //等价于后两种写法  float * ptr4; float* ptr4;
    double *ptr4;     //等价于后两种写法  double * ptr4; double* ptr4;
//.....等等类推
}

a.指针类型的确定是由 数据类型确定的

b.指针类型保证指向正确的数据类型对应的变量地址

b1. int类型 的指针 存储 int类型 的变量地址

b2. char类型 的指针 存储 char类型 的变量地址

b3. double类型 的指针 存储 double类型 的变量地址

2.如何阅读指针

方法:从右往左去读

例子:

int *ptr1; ptr1 是一个变量;

int *ptr1; *ptr1 是一个指针变量;

int *ptr1; int *ptr1 是一个指向int类型的指针变量;

测试一下:float *ptr1;

//答案
float  *ptr1;               ptr1  是一个变量;
float  *ptr1;               *ptr1  是一个指针变量;
float  *ptr1;               float  *ptr1  是一个指向float类型的指针变量;

3.指针赋值

方法:使用‘ & ’(取地址符)

例子:

int number = 2;

int *ptr2;

int *ptr1 = &number; //初始化指针时就 赋值

ptr2 = &number; //先初始化再 赋值

4.使用 “ * ”解引指针

方法:使用‘ * ’(取地址符)

例子:

int number = 2;

int *ptr1 = &number; //初始化指针时就 赋值

*ptr2 = number; //此时的 *ptr对应的地址

指针入门基础_第1张图片

5.NULL的概念

NULL其实是空,它的值是0,在指针初始化使用的时候可以赋值,那就意味着这个指针里的地址不是内存中的任何地址,也就是指针没有指向其他内存区域,NULL同时可以防止内存泄漏,防止指针去引用一些错误的地址

三、总结

指针的概念还是很清晰的,指针就是存放地址的变量,指针是变量,存放的变量地址类型也必须是和指针类型一一匹配,指针可以进行透过地址去访问地址对应的值;

例如:我们可以通过ptr1指针去访问number的值,ptr1存放是number的地址:200,我们通过解引的方法;* ptr1 就能获取number的值, * ptr1 == number == 2
指针入门基础_第2张图片

你可能感兴趣的:(#,▶,C指针,c++,c语言,开发语言,指针,内存结构)