c语言数组和指针

来源:互联网 发布:单机服装销售软件 编辑:程序博客网 时间:2024/06/06 20:56
数组的定义:数组是一块“同类型”且“连续”的存储空间
1.定义
类型   数组名[长度]     注:长度为常量
2.初始化
定义时并赋初始值  eg:int buf[4]={1,2,3,4};
3.引用:取出变量内容
数组引用元素是从下表为0开始的
数组名[下标]


注:数组名是一块空间的首地址,是常量


类型为type的一个一维数组buf,其长度为n,求第m个元素的地址(m<n)?
fun(n)=buf+sizeof(type)*(m-1);



指针
指针的定义:指针是一个地址,指针指向某一内容(在32/64位系统上,指针就是32/64位无符号整数,任何基类型的指针都是32/64位的)


指针变量:用来存放地址的变量就是指针变量;指针是一个地址,指针变量就相当于指针的名字。


定义方法:基类型 *变量名  eg:int *p;


指针的初始化:基类型 *变量名=地址量; eg:int *p=NULL;


&:&取地址运算符,预算结果可以作为指针  eg:int *p;int i=1; p=&i;
*: *取内容运算符,可以取出指针所指的内容  eg:int *p;int i=1;p=&i; *p的结果就是1。


指针的运算:
(1)以基类型的宽度为单位移动指针
int *p;
p+n: p+sizeof(int)*n;
p-n:  p-sizeof(int)*n;
其他类型同理
(2)指针的赋值运算
①把普通变量的地址,赋给同类型指针变量(变量 -> 指针变量)

②把已有地址值得指针变量,赋给另一同类型指针变量(指针变量 -> 另一 指针变量)

③把数组的地址,赋给指针变量(数组 -> 指针变量)

④把零赋给指针
int *p=NULL;
int *q;   q=0;  //表示指针的状态,什么也不指



指针与数组
1.指针数组
指针的数组,是一个数组,数组中的元素都是指针。
写法:int *a[];

2.数组指针
数组的指针,相当于定义一个指针,这里的指针指向数组,[]中的数就是指向数组的元素个数。
写法: int (*a)[];


数组名就是数组的首地址
补充:
  b
-----> b[0] b[0][0] b[0][1]b[0][2]
  b+1
-----> b[1] b[1][0] b[1][1]b[1][2]
  b+2
-----> b[2] b[2][0] b[2][1]b[2][2]


如上所示:有一个3*3的数组b,我们可以把第一行看成是数组名为b[0]的一维数组,所以b[0]是指向b[0][0]的指针常量,b[0]是b[0][0]的地址,b[i]是b[i][0]的地址,因此我们把3*3的二维数组可以看成b[0],b[1],b[2]
3个一维数组,然后再把b[0],b[1],b[2]看成是一个数组名为b的数组,所以b是指向“元素”b[0]的指针常量,所指向的是原来二维数组的第一行,也就是指向一个一维数组。所以
b和b[0]都是指针,b是指向一个数组,而b[0]是指向数组的一个元素。


指针b[i]+j和*(b+i)+j都是指向数组元素b[i][j]的指针常量。b[i][j]=*(b[i]+j)/*(*(b+i)+j)(二维数组的元素用指针表示的两种方法)




所以关于二维数组的访问方法
(1)下表法:a[i][j]
(2)指针法:*(*(a+i)+j) 注释;a+i代表的是行号,代表的是每一行这个一维数组,所以a+i这个指针指向的是a+i这个一维数组的第一个元素的地址*(a+i),加上列数j,就可以得到元素的具体地址*(*(a+i)+j)
(3)混合法:*(a[i]+j)    注释:a[i]是第i行的一维数组名,所以a[i]指向的是每一行第一个元素的地址,加上列数j,得到元素地址在取内容。


3.指针的指针
int **p 指向指针(地址)的指针变量

多维数组的元素访问:
定义一个比原维少一维的一个数组指针。
二维数组:a[i][j]   int (*p)[j];   p=a;   *(*(p+i)+j);
三维数组:a[i][j][m]   int (*p)[j][m] p=a; *(*(*(p+i)+j)+m);
四维数组:a[i][j][m][n] int (*p)[j][m][n]p=a; *(*(*(*(p+i)+j)+m)+n);


多维数组的元素分配:
二维数组:a[3][4] 总共12个元素,分3份,一份4个元素
三维数组:a[2][3][4] 总共24个元素,第一次分2份,一份12个元素(3*4),第二次每一份再分成3份,每一份4个元素。
四维数组:a[2][3][4][5] 总共120个元素,第一次分2份,每一份60个元素(3*4*5),第二次再将每一份分成3份,每一份20个元素(4*5),第三次再将每一份分成4份,每一份5个元素。
原创粉丝点击