答案为:int (*p)[4]。看到这个答案,和我们的第二题的答案很类似,所以我们可以这样认为,一维数组名的地址实质就是一个二维数组的一行。 下面我们看第四题,有涉及到数组名的地址的问题,二维数组名的地址,根据我们上次分析,可以知道,二维数组名的地址偏移实际上是一个二维数组对象,即偏移一个面,那么对于指针的定义...
int (*p)[4]; int *q[3]; int (*p)[4]中的p是指向一维数组的指针变量,p可以赋值: p=a; 则p+i==&a[i] == *(p+i)==a[i], *(p+i)+j==&a[i][j] ==*(*(p+i)+j)==a[i][j], int *q[3]中的q是一维指针数组的数组名,不是变量,不能赋值,q=a是错误的, 但是这个数组的...
可以,但是有危险。会被编译器警告。
int a[3][4]的类型是int [3][4],你要定义一个指针指向它,那么首先它得是个指针,int*p,然后指向这个数组,不能写int*p[4]这样写的话p就是个指针数组了,因为p是变量,而[]的优先级要高于*,所以只能写作int(*p)[4];
你这个考的是int类型是2个字节。char是1个字节。还有指针的用法。提示出错,你就改正确吧。首先C语言...
地址即指针,指针即地址,所以"&m[0][0]"是个指向int型的指针.数组是线性存储的,即m这个二维数组,从其第一个元素到最后一个元素的内存地址,是按sizeof(int)进行逐级递增的,所以执行"int *p = &m[0][0];"后,p指向了m这个二维数组的第一个元素,则有下列等价关系: p[n]=m[n/4][n%4];...
二维数组相当于多行列数相同的一位数组组合起来;int (*p)[N]定义一个行指针p,其中:p指向一个N列二维数组的首地址 p自增1,p指向下一“行”一维数组的首地址 因为p是一个二级指针。所以索引其指向的数据内容需要取二次内容,格式及解释如下:格式:*(*(p+行)+列)解释:其实很好理解,因为p...
p是指向数组的指针,而这个数组是含有3个整型单元的数组。比如,include <stdio.h>int main(int argc, char *argv[]){int (*p)[3];int a[3] = { 0, 1, 2 };int b[2][3] = {{1, 2, 3}, {4, 5, 6}};p = &a;printf("%d.%d.%d\n", (*p)[0], (*p)[1], (*p)...
正确的。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。p是一个指针变量,它指向包含4个int元素的一维数组,此时p的增量以它...
对于形参int p[][3]实际上等同于int (*p)[3],都是将p定义成了一个指向数组的指针,就是说p可以指向一个具有3个int型元素的数组。可以像这样使用:void f(int p[][3]){} int arr1[3];int arr2[2][3];//以下两种调用方式都对 f(&arr1);f(arr2);那为什么int p[][3](或int ...