嵌入式学习12(数组,指针,指针与数组)

来源:互联网 发布:超级淘宝系统下载 编辑:程序博客网 时间:2024/05/19 11:45

数组


1、数组的定义:数据类型相同,连续存储的元素的集合。

特点:从0开始,可下标引用

2、  初始化方式有两种

Ø  int a[5]={1,2,3};//未赋值的自动补零 //一次结清

int a[]={1,3,5,8};//此情况下可省

a[2][2]= {{1,2},{3}};   等效于       a[][2]={{1,2},{3}};  //可省第一维

Ø  int b[10];  //10表个数

b[0]=1; b[1]=1;…...//0和1表下标   //引用下标逐一赋值

3、注意事项,定义数组时,数组长度必需给定,二维数组可省前一位int a[][10];

         int i=4,;                           宏替换        #defineN 100

         inta[i]; //错误,数组大小必须确定    改进方案      …….//以后修改宏即可修改大小

//VC下不行,Linux下可以,一维可以,二维不行          int a[N];                                         

4、  多维数组分赃

Ø  对于:inta[4][3][2][2]={1,2,3,4,5,6,7,8};

共:4*3*2=24 个元素

a[0]:  3*2=6 个元素 

a[0][0] : 2 个元素

分配情况为:{{{1,2},{3,4},{5,6}},{7,8},{},{}} //先六个六个一砍,再两个两个一砍

Ø  对于inta[6][3][4][5]={{},{},{},{{},{{13}},{1}}};

13为a[3][1][0][0]

1为a[3][2][0][0]

4、数组在函数与函数间的传递

Ø  复制传递  int zmx(int a[],int size)

Ø  地址传递  int zmx(int *a,int size) //指针即地址




指针


1、引入

变量:是程序语言对存储单元的抽象

地址:内存中,每个字节都有一个编号,称为地址

指针变量:内存单元的编号(地址)称为指针,用来存放地址的变量,称为指针变量

(32位系统上,指针(地址)就是一个32位无符号整数,任何基类型的指针都占32)

2、指针变量也像int、char那样是个变量,也有变量的各种特性,

 指针变量的定义和初始化

(1)指针的定义形式:                                                                                                           

     [指针存储类型]  <数据类型>  *<指针变量名>  //int *p:等价于 int* p;

(2)指针的初始化:

     <数据类型*>  <指针变量名> = <地址量>

int *p=NULL;  //等价于int *p=0;//定义指针变量p,指向空地址。        

指针的运算

1)指针的加减 n:以基类型宽度为单位移动指针

px+n  : (px)+sizeof(px的类型)*n

px-n  :  (px)-sizeof(px的类型)*n

 

(2)两个指针相减

     间隔距离是多少个单位(基类型宽度)

 //          px-py:       (sizeof(px)-sizeof(py))/sizeof(类型);

2、  常用操作

*:取值

&:取地址,scanf函数就是用这个原理

%p:输出地址的占位符


指针即地址,指针变量是存地址的变量


指针与数组

1、两个易混淆的概念

Ø  指针数组:指针数组,数组中的元素,是指针变量。

         int  *a[5];  或   int* a[5];

Ø  数组指针: 数组指针,占4个字节,指向一个数组。

int  *a;     指向一维数组的指针

int  (*a)[3];  指向二维数组的指针,第一维维数省略了

int  (*a)[2][3]; 指向三维数组的指针,第一维维数省略了

2、数组的特点:数组名是首元素的地址,也是数组的地址,是一个指针常量

   对数组的访问:

Ø  下标法:a[i][j]

Ø  指针法:*(*(a+i)+j)

Ø  混合法:*(a[i]+j)


指针访问数组例子























多维数组访问

a[i][j]=*(*(p+i)+j)

a[i][j][k]=*(*(*(p+i)+j)+k)






原创粉丝点击