引入

char a ='c',c被放到了缓存里

理论讲解

地址

  1. 内存中每一个存储单元有唯一编号,这个编号称为存储单元的地址。在程序中所定义的变量,编译系统会根据变量的类型,分配一定长度的存储空间。

如:

int a;  /*2个字节*/
float b;   /*4个字节*/

  1. 如果在程序中定义了一个变量,系统会根据变量的类型为变量分配相应字节的 存储空间,用于存放数据,存放的数据称为内存单元的内容。而系统为变量分配的存储空间的 首个 存储单元的地址被称为变量的地址

int a的地址是2000H
float b的地址是2002H

助记图

指针

指针:指针就是地址,一个变量的地址称为该变量的指针。

  • 如果地址2000h是变量a的指针(表示成&a)

指针变量:存放地址的变量 称为指针变量
指针变量的值为地址。

指针变量的指向:
如果指针变量p中存放的是变量a的地址,则称指针变量p指向变量a。这样,对变量a的访问就有两种方式,一种是直接通过变量a来访问;另一种是通过指针变量a的指针变量p来访问。

助记图

访问变量的方式

  • 直接访问的方式:通过变量名直接存取变量的值。
  • 间接访问方式:按变量的地址存取变量的值。

思考

指针变量的定义和使用

·定义指针变量的一般形式为:

[存储类别]类型标识符 *变量名;

例如:int *pt;
其中:
int——pt是只想int型变量的指针变量。
*——指针标记。
pt——指针变量名,只能存放指针。

注意:

  1. 只能存地址
  2. 只能存int型变量的地址。
  3. *p:取值
  4. p:取地址
  5. 再次使用的时候就不用带* 了

指针的定义及初始化

例如:int a,b;
    int *p1,*p2;      ----|    int *p1=&a;
    p1 = &a;              |-→
    p2 = &b;          ----|    int *p2=&b;

& 获取变量地址
思维图

如何通过指针(地址)去访问元素

应用指针变量:运算符用于某个地址之前,表示取*厚地址的内容

int i;
int *p;    //*变量定义
p = &i;    //变量赋值
*p = 5;    //相当于i=5

对照图

p 是指向整型变量的指针变量,*p是整型变量i的值。
*p => 根据p里面的地址,去缓存中 到这个地址中存的数值。

后面可以加地址:(&i),指针变量:*(指针变量)
*:取地址里的值

助理解

课堂验证

int a,b;
int *p1,*p2;
a=10;
b=20;
p1=&a;
p2=&b;
printf("%d  %d\n",*p1,*p2);
p1=p2;
*p2=5;
printf("%d  %d\n",*p1,*p2);

看图理解

看看能否看懂

结果

int a,b;
int *p1,*p2;
a=10;
b=20;
p1=&a;
p2=&b;
printf("%d  %d\n",*p1,*p2);
*p1=*p2;
*p2=5;
printf("%d  %d\n",*p1,*p2);

看图理解

验证结果2
验证结果

赋值为空

定义一个空指针 int *p;p=NULL;

  • 两个指针变量相减:两个指针指向的是同一个数组元素,相减所得的就是之间元素的个数。(两个指针相加没意义)
  • 两个指针变量的比较:可以判断相应的数组元素的位置先后。

真题

题目1

题目2

4题的c选项用到了&&,碰到就跳过

编程练习

输入三个整数,按要求从小到大的顺序输出,要求用指针完成

答案


暂无

指针与数组

理论

(一)指针变量的运算
指针移动
同类型指针变量之间的运算
同类型指针变量之间的运算
同类型指针变量之间的运算

int a[10];

a =>数组的首地址

&a=a[0]

(二)一维数组元素的表示法
地址法

理论讲解

(三)指针作为函数参数(传地址)
指针变量存放的是地址值,同样可以作为函数的参数来进行“地址传送”,实际参数可以是地址常量或指针变量,形式参数则为指针变量(通过“传值”完成参数即:地址的传递)。

用函数来实现两个数的交换

void swap(int *p1,int *p2)
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}


int _tmain(int argc, _TCHAR* argv[])
{
    int a=3,b=5,*pa,*pb;
    pa=&a;pb=&b;
    swap(pa,pb);
    printf("%d%d\n",a,b);
    printf("%d%d\n",*pa,*pb);

    return 0;
}

解析
解析

联系

从键盘输入10个数,找出其中最小的数并显示出来。要求使用数组。使用指针移动来找出最小值。

答案(敲一遍)


答案
解析

总结

2024-08-20T10:22:08.png

最后修改:2024 年 08 月 20 日
如果觉得我的文章对你有用,请随意赞赏