数组指针

来源:互联网 发布:mysql emoji 编辑:程序博客网 时间:2024/05/21 22:39

编译器VC6.0

#include <stdio.h>
#include <string.h>

//      数组指针

/* 定义:
int (*p)[5] 数组指针:这是一个指针,该指针指向一个数组,该数组有5个int型元素,
                                  该数组占有sizeof(a)个连续的内存单元,该指针指向该内存块

   的首地址,也就是该数组的首地址。

int a[5]={0,1,2,3,4};
int (*p1)[3]=&a;
int *p2=&a;
p1是个指针,该指针指向数组a[5],p1+1表示p1加了一个步长(3个int数据类型)
假设a的地址是0x1000;
p1存放的内容: 0x1000;  p1+1存放的内容:              0x1000+sizeof(int)*3=0x1012
*p1存放的内容:0x1000;  *p1+1存放的内容:            0x1000+sizeof(int)=0x1004
p2存放的内容: 0x1000;  p2+1存放的内容:             0x1000+sizeof(int)*5=0x1020
*p2存放的内容:0     ;  *((int*)(p2+1)-1)存放的内容:4
int  *p[5]  指针数组:这是一个数组,该数组有5个数据元素,每个数据元素存放一个
指针,该指针指向的数据类型是int类型,该类型占有的内存大
小为sizeof(int)。

*/

int main()

{

// 一维数组和数组指针应用:
/* int a[5]={0,1,2,3,4};
int (*p1)[5]=&a;//左右两侧的数据类型是一样的都是数组的地址
int (*p2)[5]=a;//左右两侧的数据类型是不一样的,左侧的是数组的地址,右侧的是数组首元素的地址,只不过这两个地址值是一样的,但p2+1和a+1是不同的。
printf("p1+1=%d\n",p1+1);
printf("p2+1=%d\n",p2+1);
*/

// 把上面的int (*p1)[5]改为int (*p1)[3]
/*
int a[5]={0,1,2,3,4};
int (*p1)[3]=&a;
int (*p2)[3]=a;
printf("p1+1=%d\n*(p1+1)=%d\n",p1+1,*(*(p1+1)+1));
printf("p2+1=%d\n*(p2+1)=%d\n",p2+1,*(p2+1));
printf("p1[0][1]=%d\n*(p2+1)=%d\n",p1[0][1],*(p2+1));//如果不理解,等我发了二位数组和数组指针再看
*/

}

0 0
原创粉丝点击