【郝斌数据结构自学笔记】5_预备知识_指针_2

5_预备知识_指针_2

指针的重要性:

指针是C语言的灵魂

定义:

地址:

地址是内存单元的编号,从0开始的非负整数,范围:0-FFFFFFFF【0-4G-1】

CPU=====地址线,控制线,数据线=====内存

指针:

指针就是地址,地址就是指针。

指针变量是存放内存单元地址的变量。

指针的本质是一个操作受限的非负整数。

分类:

1.基本类型的指针

2.指针和数组的关系

 

变量并不一定连续分配,随机分配内存。

 

内存:

内存是多字节组成的线性一维存储空间。

内存的基本划分单位是字节。

每个字节含有8位,每一位存放1个0或1个1.

内存和编号是一一对应的。

软件在运行前需要向操作系统申请存储空间。在软件运行期间,该软件所占空间不再分配给其他软件。当软件运行完毕后,操作系统将回收该内存空间(操作系统并不清空该内存空间中遗留下来的数据)。

 

NOTE:1)指针变量也是变量,普通变量前不能加*,常亮和表达式前不能加&。

2)局部变量只在本函数内部使用。

 

如何通过被调函数修改主调函数中普通变量的值。

1)实参为相关变量的地址;

2)形参为以该变量的类型为类型的指针变量;

3)在被调函数中通过   *形参变量名的形式   的形式就可以修改主函数。

CASE 1

#include<stdio.h>

 

int main(void)

{

         int*p;       //p是个变量名字,int*表示该p变量只能存储int类型变量的地址

         inti=10;

         intj;

 

//      j=*p;

//      printf("%d\n",j);       //error,p未指定

 

//      charch='A';

//      p=&ch;     //error,类型不一致

        

         p=&i;   //p保存i的地址,p指向i;修改p的值不影响i的值,修改i的值不影响p的值;任何场合下,*p和i可以互换。*p等价于i。

         //p=10;     //error

         j=*p;//等价于j=i;

         printf("i=%d,j=%d,*p=%d\n",i,j,*p);

 

         return0;

}

 

CASE 2

#include<stdio.h>

void f(int * i)//不是定义了一个名字叫做*i的形参,而是定义了一个形参,该形参名字叫做i,它的类型是int*

{

         *i=100;    

}

 

int main(void)

{

         inti=9;

         f(&i);         //局部变量只在本函数内部使用。

         printf("i=%d\n",i);

}

 

 

指针和数字

数组名:一维数组名是个指针变量,它存放的是一维数组第一个元素的地址,它的值不能被改变,一维数组名指向的是数组的第一个元素。

CASE 1

a[3]==*(3+a);   3[a] ==*(a+3)==*(3+a);

int a[5]={1,2,3,4,5};

Show_Aarry(a,5);//a等价于&a[0],&a[0]本身就是int*类型

 

void Show_Array(int * p,int len)

{

         IntI;

         //P[2]=-1;//   p[0]=*p ; p[2]==*(p+2)==*(a+2)==a[2] ; p[i]就是主函数的a[i]

for (i=0;i<lem;i++)

         printf(“%d\n”,p[i]);

}

指针变量的运算

指针变量不能相加,不能相乘,不能相除。

如果两指针变量属于同一数组,则可以相减。

指针变量可以加减一整数,前提是最终结果不能超过指针变量

p+i的值是p+i*(p所指向的变量所占的字节数)

p-i的值是p-i*(p所指向的变量所占的字节数)

p++<==>p+1   p--<==>P-1

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NewNicholas/article/details/49849981
下一篇【郝斌数据结构自学笔记】1-4_数据结构定义及特点
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭