指针数组,指向整型数组的指针如何用
一、指向整型数组的指针如何用
数组指针(也称行指针)
定义int(*p)[10];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是10,也可以说是p的步长。也就是说执行p+1时,p要跨过10个整型数据的长度。
例:int(*p)[4];//该语句是定义一个数组指针,指向含4个元素的一维数组。所以数组指针也称指向一维数组的指针,亦称行指针。
指针数组
定义int*p[n];[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样*p=a;这里*p表示指针数组第一个元素的值,a的首地址的值。如要将二维数组赋给一指针数组:int*p[3];inta[3][4];p++;//该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针for(i=0;i<3;i++)p[i]=a[i]这里int*p[3]表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]所以要分别赋值。这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
C语言30天核心突破
二、结构体指针数组如何定义并动态申请空间
结构体指针数组可以通过以下方式定义并动态申请空间:先定义结构体类型,然后定义结构体指针数组,再使用malloc函数动态申请空间。例如,定义结构体类型为student,结构体指针数组为stu,动态申请10个元素的空间,可以使用如下代码:```typedefstruct{charname[20];intage;floatscore;}student;student*stu[10];for(inti=0;i<10;i++){stu[i]=(student*)malloc(sizeof(student));}```这样就定义了一个名为stu的结构体指针数组,其中每个元素指向一个student类型的结构体,数组长度为10,且每个元素都动态申请了一个student类型结构体所占用的空间。
三、怎么给指针数组分配内存和初始化
指针数组,每个指针要单独分配内存,不过如果各个指针上分配长度不相等,那么需要自行记住每个指针上内存的大小,避免越界。
可以使用循环进行分配及初始化。
以定义一个5个元素的int*数组,每个上分配10个int型空间,并初始化为0为例
int*a[5];inti,j;for(i=0;i<5;i++){a[i]=(int*)malloc(sizeof(int)*10);for(j=0;j<10;j++)a[i][j]=0;}