原创 指针(一)

2011-8-23 03:13 1334 10 10 分类: MCU/ 嵌入式

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

地址就是内存单元的编号

指针变量是存放地址的变量

指针和指针变量是2个不同的概念

#include<stdio.h>

void main()

{

    int *p;//定义一个指针

    int i;//定义一个变量

    i=11110;//初始化变量

    p=&i;//取地址

    printf("%d",*p);

}20110823031216001.jpg

 

 

指针的重要性:

指针可以表示一些复杂的数据结构。

图和树的结构,人事管理结构,一个地图有很多城市,经过哪几个站线路的问题,只能用图解决,用指针解决,快速传递数据,把数据发送函数,用指针速度快,是函数返回一个以上的值,一个RETURN返回一个值,能直接访问硬件,内存那一块存储,能够方便的处理字符串

是理解面向对象语言中引用的基础

总结:指针是c语言的灵魂

字符串的处理。

指针的定义:

地址:

    内存单元的编号,从0开始的非负整数,

范围:地址范围,内存条决定范围,CPU能直接对内存条操作,内存速度快,越小速度快,东西小,通常大的成本低,大的话就成本高,CPU直接处理内存的数据,内存当做3根线来的,控制线,数据线,地址线。内存分为很多格子,CPU要对内存条进行控制,读数据还是写数据通过控制线来控制的,数据线是用来控制数据的传输,数据传输的方向是由控制线来决定的。地址线是决定单元的。

    现在只考虑地址线,内存条,和CPU确定对哪个单元进行控制,存储几个0几个1,一个单元是一个字节,地址总线,一根线只有2中状态,所有的物理设备,控制几个内存单元,一个线最多控制2个状态,2根线控制4个内存单元,然后有n条地址线就有2n次方个单元。我们的机器是32位的,32个地址线,总共控制232次方单元,一个单元为8位。232次方就是4G大小, 取决硬件和软件支持的。【0-----4G-1

 

字节:就是存储数据的单位,并且是硬件所能访问的最小单位,最小的单位就是1位,但是硬件上不能精确到位只能精确到字节,是8位,硬件访问的最小单位就是字节,1K=1024字节   1M=1024K  1G=1024M  计算机文化课,G和显示的是有差别的,硬盘350G,因为那个的计算是1000为跨度的。机遇,大环境,个人的努力,存储单位要搞清楚,CPU只能控制到字节,

指针:

指针就是地址,

地址就是指针

指针变量就是存放地址的变量

指针和指针变量是2个不同的概念

指针的本质上是一个操作受限的非负整数,可以加减乘除,指针是不允许相加,乘,除,但是可以相减,就是怕超出范围的。指针不能加,乘,除,只能相减。

 

指针的分类:

1.    基本类型指针 

就是刚开始的那个程序,初始化和定义指针,int * 是一个数据类型,只能存放int类型的地址,取地址&I  p指向I    i是啥,*p就是啥。

    指针很容易出错,指针常见错误,

#include<stdio.h>

Int main()

{

    Int *p;局部变量没有初始化则里面则为垃圾值,以垃圾值为地址的单元

    Int i=5;//5赋给了一个不知道地址的单元里面、就是不属于你的单元。因为初始化的变量存的是垃圾值,而不在我们规定的地址范围里面。编程最关键的是和内存打交道,如果A运行起来,分配2个单元,不能把其他的地址上数据改了,这样就不行。不属于他的单元进行改写,这样点病毒的特征。

 

    *p=I;

    Printf(“%d\n”,*p);

    Return 0;

}

Int I =5;

Int *P;

Int *q;

P=&I;

*q=p;类型不一样,不能转换,应该改成,*q=*p;不过这里还是没有初始化的垃圾值。照样错了。

应该改成p=q;但是还是错了,q里面还是垃圾值。如果没有赋值就是垃圾值,有权利对里面内容进行读和写。Q的空间是属于本程序的,所以本程序是可以读写q里面的内容,如果q内部是垃圾值,则本程序不能读写*q的内容。因为*q所代表的内存单元的控制权限并没有分配给本程序。所以就会报错,所以本程序运行到13行时就会立即出错,指针最复杂的错误是内存的泄露和野指针,有个空间,有个p,q,r,都指向该空间,讲指针的目的就是为了动态内存的地址。分配完就要释放,freep),只释放一次就行了。当程序写的很大了,一个空间可能有很多指针指向他,所以要释放。内存越用越少的。

分配后还是要释放的。指针可以指向一个空间,所以要free.但是又不能多freeWindows开机越用越慢,这是因为有些地方忘了free。指针还是很难的。

Pintf(“%d\n”,*q);

2.    指针和数组的关系

 

 

3.    指针和函数的关系

 

4.    指针和结构体的关系

 

 

5.    多级指针

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条