指针数组,是指一个数组里面装着指针;
一下是指针数组的使用案例:
#include "stdafxh"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR argv[])
{
int ptr[5]; //指针数组
int p = 5, p2 = 8, page, page2;
page = &p;
page2 = &p2;
ptr[0] = &p;
ptr[1] = page2;
cout << ptr[0] << endl;
cout << page << endl;
cout << ptr[1] << endl;
return 0;
}
运行结果:
创建:(1)声明一个数组,声明时用常量表达式指定数组维数,然后可以用数组名访问数组元素。
(2)声明一个变长数组,声明时用变量表达式指定数组维数,然后用数组名来访问数组元素。
(3)声明一个指针,调用malloc(),然后使用该指针来访问数组元素。malloc接受一个参数:所需内存字节数。然后malloc()找到可用内存中一个大小合适的块。内存是匿名的;也就是说,malloc()分配了内存,但没有为它指定名字。然而,它却可以返回那块内存第一个字节的地址。因此,可以把那个地址赋值给一个指针变量,并使用该指针来访问那块内存。因为char代表一个字节,所以传统上曾将malloc()定义为指向char的指针类型。然而,ANSI
C标准使用了一个新类型:指向void的指针。这一类型被用作“通用指针”。函数malloc()可用来返回数组指针、结构指针等等,因此一般需要把返回值的类型指派为适当的类型。如果malloc()找不到所需的空间,它将返回空指针。我们使用malloc()来创建一个数组,可以在程序运行时使用malloc()请求一个存储块,另外还需要一个指针来存放该块在内存中的位置。例如,考虑以下代码:
double
ptd;
ptd
=
(double
)malloc(30sizeof(double));
使用第二种或第三种方法可以做一些用普通的数组声明做不到的事;创建一个动态数组(dynamic
array),即一个在程序运行时才分配内存并可在程序运行时选择大小的数组。例如,假定n是一个整数变量。在C99之前,不能这样做:
double
item[n];
/如果n是一个变量,C99之前不允许这样做/
然而,即使在C99之前的编译器中,也可以这样做:
ptd=(double
)malloc(nsizeof(double));
变长数组VLA和malloc的用法有两点区别。一个区别在于VLA是自动存储的。自动存储的结果之一就是VLA所用内存空间在运行完定义部分之后会自动释放。因此不必使用free()。另一方面,使用由malloc()创建的数组不必局限在一个函数中。例如,函数可以创建一个数组并返回指针,供调用该函数的函数访问。接着,后者可以在它结束时调用free()。free()可以使用不同于malloc()指针的指针变量;必须一致的是指针中存储的位置。
用法:
//注意指针数组和数组指针分别是如何指向二维数组的
#include
<stdioh>
main()
{
static
int
m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
int
(p)[4];//数组指针
p是指针,指向一维数组,每个一维数组有4个int元素p是个数组的地址,p就是数组元素了
int
i,j;
int
q[3];//指针数组
q是数组,数组元素是指针,3个int指针
p=m;
//p是指针,可以直接指向二维数组
printf("--数组指针输出元素--\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("]
",((p+i)+j));
}
printf("\n");
}
printf("\n");
for(i=0;i<3;i++,p++)//p可看成是行指针
{
printf("=
",p);//每一行的第一个元素
printf("=
",(p+1));//每一行的第二个元素
printf("=
",(p+2));//每一行的第三个元素
printf("=
",(p+3));//每一行的第四个元素
printf("\n");
}
printf("\n");
printf("--指针数组输出元素--\n");
for(i=0;i<3;i++)
q[i]=m[i];//q是数组,元素q[i]是指针
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("=
",q[i][j]);//q[i][j]可换成(q[i]+j)
}
printf("\n");
}
printf("\n");
q[0]=m[0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("=
",(q[0]+j+4i));
}
printf("\n");
}
printf("\n");
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)