第十五课 简单易懂的指针

  前言:

%x    输出十六进制
&    取地址符
*    取出地址内容,有时又是定义指针的标志符
sizeof() 计算字节
记住两句话:1.引用变量的就是引用变量的内容 2.记住上一句话 

   1.指针即地址。

       我们定义变量的时候,一个婴儿出生编译器会在内存中分配空间。这就好像一个人,来到这个世界上就会有一个家,这个世界会为他分配一个摇篮。这个摇篮就是他的地址。

        比如定义一个int a;那么编译器就会为她分配一个4个字节的空间。

在这个程序中,可以看出,定义的int a=100,编译器为她分配了4个字节的空间,地址叫18ff44,里面存放了100.

      引用变量有两种办法:(引用变量就是引用变量的内容,在这个程序中,a的内容是100)

一种是根据变量名引用。比如在上个程序中,输出a的值;

第二种办法是根据地址名来引用.

和人的生活对比,每一个人都占据了一个地方,可以精确到一个点,只要找到这个点,就能找到这个人。这个点都相当于地址。

指针说到底就是地址。

2.定义指针并初始化

定义指针的方式:
    类型* 指针名;
    int* point=NULL;//定义一个指针指向空地址

ps:NULL是一个空地址。
指针被定义出来一定要初始化,无论如何都要

 指针变量时用来存放地址的。

int a=100;
int* point=&a;

在这个定义中,int* 才是一个整体,point是指针名。
&a是取出a的地址储存在指针变量中。
因此point里面存放着a的地址,而不是a的内容100;

3.引用指针的内容

可以看出输出point与&a一致,所以point指的是a的地址

4.取出point里面的内容

这个运算符是*

从这个程序中可以看出,*point与point是不一样 的。

*这个符号可以取出地址里面的内容。

5.取出指针所指向的内容

实际上,所有的指针都是一样的空间,会被分配4个字节的空间

但是,取出指针所指向的内容却不是如此,他们是根据自己的类型取出变量

在一般的编译器里面,定义的指针要与所所存放的数据保持一致。

也就是说int型指针只能指向int型变量,不能指向其他变量。

6.指针所指向的内容

//交换ab两个数据的内容
int a=1;
int b=2;
int *pa=&a,*pb=&b;//pa指向a的地址,pb指向b的地址
pa=&b,pb=&a//pa指向b的地址,pb指向a的地址

这个算法只是改变了*pa和*pb,而ab的值并没有改变;因为只改变了pa,pb的指向。

下面这个算法可以交换ab的值

int a=2,b=3
int* pa=&a,pb=&b;
*pa=*pa+*pb;
*pb=*pa-*pb;
*pa=*pa-*pb;

下一节讲指针与数组,指针的加法减法也会一起解释,这些东西只有在指针才容易说明白;

猜你喜欢

转载自blog.csdn.net/weixin_42581560/article/details/81171620