我读到有关(* ptr)[5]的内容,它可以指向5个元素的整数数组。这是什么意思?
答案 0 :(得分:0)
当您要遍历二维或更高维数组时可以使用它。
例如,您具有以下二维数组:
int a[3][4] = {
1,2,3,4,
5,6,7,8,
9,0,1,6
};
常规*ptr
将遍历数组中的每个元素。
如果此数组的基址为:1000。那么它将递增的下一个地址将为1002、1004、1006。取sizeof(int)
=> 2。
(*ptr)[5]
要做的是跳到下一个第5个元素,然后指向它。
在上面的示例中,如果我要跳转到其中每个1-d数组的开头,则只需使用(*q)[4]
并跳转到下一个第4个元素,而不是下一个
因此,如果要显示此数组的元素,可以通过两种方式执行此操作:
使用常规* ptr
void display(int * q,int row,int col){
int i, j;
for(i=0; i<row; i++){
for(j=0; j<col; j++){
printf("%d ", *(q + i*col + j));
}
printf("\n");
}
}
使用(* ptr)[4]
void show(int (*q)[4], int r, int col){
int i, j, *p;
for(i=0; i<r; i++){
p = q+i;
for(j=0; j<col; j++){
printf("%d ", *(p+j));
}
printf("\n");
}
}
答案 1 :(得分:-1)
int(* q)[5]表示q是指向5个整数的数组的指针。为了更好地理解,让我们使用此指针指向5个整数的数组。
void main()
{
int a[][5] = {
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15
};
int *p;
int (*q)[5];
p = *a;
printf("%d %d\n",p,q);
p++;
q++;
printf("%d %d\n",p,q);
}
输出:
65500 65500
65502 65510
首先,p和q包含相同的地址65500。但是,在递增p时,它指向5个整数的数组。因此,递增p时,它指向下一个整数, 而q开始指向5个整数的下一个一维数组。将2D数组传递给函数时,指向数组的指针非常有用。