-
int a[3]][4] = ;
int *p;
p =&a;
就是这样。。。 首先,错误是你没有在第二行添加它;
另外,您没有在 a& 之前添加地址运算符
-
char a[1000]=;
for(int i=4;i<1000;i++)a[i]=0;即 a[i]='\0';终结者。
这就是初始化数组的全部内容。
for(int i=0;i<1000;i++)if(a[i]==0) break;跳。
-
int a[3][4] = ;再来一个]。
int **p;对二维数组使用二维指针。
p = a;
-
1.设 p 是一个指向二维数组 a[m][n] 的指针变量,则我们有:
int* p=a[0];p 是指向一维数组的指针。 p++,p 指向 a[0][1]。
2.如果定义了 int (*p1)[n]; p1=a;在 p1++ 之后,p1 指向 a[1][0];
然后 p+j 将指向 a[0] 数组中的元素 a[0][j]。
由于数组 a[0]、a[1] a[m-1] 等的行是按顺序和连续存储的,因此 a 数组中任何元素 a[i][j] 的指针的一般形式如下:
p+i*n+j,如果用 p1 表示,则对应的是 *(p1+i)+j。
指向元素 a[i][j] 的相应指针表示为:
p+i*n+j,如果用 p1 表示,则对应的是 *(p1+i)+j。
类似地,a[i][j] 也可以用指针下标表示,例如 p[i*n+j]。
如果有:int *p=a[0];
那么对应于数组 a 的元素 a[1][2] 的指针为:p+1*4+2
元素 a[1][2] 也可以表示为:*(p+1*4+2)。
在下标符号中,a[1][2] 表示为:p[1*4+2]。
-
1.设 p 是一个指向二维数组 a[m][n] 的指针变量,则我们有:
int* p=a[0];p 是指向一维数组的指针。 p++,p 指向 a[0][1]。
2.如果定义了 int (*p1)[n]; p1=a;在 p1++ 之后,p1 指向 a[1][0];
然后 p+j 将指向 a[0] 数组中的元素 a[0][j]。
由于数组 a[0]、a[1] a[m-1] 等的行是按顺序和连续存储的,因此 a 数组中任何元素 a[i][j] 的指针的一般形式如下:
p+i*n+j,如果用 p1 表示,则对应的是 *(p1+i)+j。
指向元素 a[i][j] 的相应指针表示为:
p+i*n+j,如果用 p1 表示,则对应的是 *(p1+i)+j。
类似地,a[i][j] 也可以用指针下标表示,例如 p[i*n+j]。
如果有:int *p=a[0];
那么对应于数组 a 的元素 a[1][2] 的指针为:p+1*4+2
元素 a[1][2] 也可以表示为:*(p+1*4+2)。
在下标符号中,a[1][2] 表示为:p[1*4+2]。
-
设二维数组为 typename a[m][n],则指向数组的指针为 typename (*p)[n] = a; 这使得使用 p 而不是二维数组成为可能。
-
根据您的具体应用,有几种方法可以做到这一点:
1. 一级指针。
例如:int a[m][n];
int *p = &a[0][0];
相当于用一个二维数组作为一维数组,需要根据n的大小来计算下标,但是使用起来非常灵活。
2.指针数组。
例如:int a[m][n];
int *p[m];
for(int i=0;i示例:int a[m][n];
int (*p)[n];
p = a;
它与二维数组没有什么不同,但缺点是 n 是固定的 4 级二级指针。
例如:int a[m][n];
int **p;
p = (int *)malloc(sizeof(int *)m);
for(int i=0; i
-
1.首先,我们在计算机中打开C语言软件,创建一个新项目。 C 文件、输入头文件和 main 函数。
2.然后我们进入图表**来初始化数组并定义变量类型。
3. 然后我们进入图表**,用for语句实现数组的访问。
4.然后我们输入图表**进行输出。
5.然后我们输入图**进行编译运行,我们可以通过辅助指针操作二维数组。
-
要通过辅助指针访问 2D 数组,需要将等于 2D 数组中行数的一维数组指针分配给辅助指针,然后将 2D 数组每行开头的地址分配给相应位置的 1D 指针。 之后,可以通过 2D 指针直接访问它。
参考下面的**,您可以查看具体的注意事项以帮助您理解。
包括输入和输出头文件。
include 此程序需要使用 malloc free 函数,该函数引用头文件。
int main()
定义一个二维数组并分配 1-12 之间的值
int **p = null;定义二维指针。
int i, j;
p = (int **malloc(sizeof(int *)3);要访问的数组有三行,因此请应用三个一维指针变量。
for(i = 0; i < 3; i ++
for(i = 0; i < 3; i ++
free(p);释放请求的内存。
return 0;
使用二维指针访问二维数组主要用于函数调用。
对于一维数组,如果函数参数是一维指针,则可以直接使用数组名称作为函数参数。 但是,如果函数参数是二维指针,则直接使用二维数组名称作为参数,则会出现访问错误,因为二维指针和二维数组的访问方式不同,需要像示例中那样进行转换。
-
以下是我的理解:
A 是一个二维数组,即一个二级指针,那么 a 表示指向数组头部的二级指针,*a 表示指向数组头部的第一级指针,**a 表示第一个数组元素。 因为二维数组只是内存地址上一维数组的连续表示,所以 a 和 *a 之间的区别在于它们具有不同的有效范围,分别是数组的两个维度的维度。
所以 a 和 *a 都是指向数组标头的指针,它们都指向第一个元素,因此输出地址是相同的。
已确认:包括
int main()
int a[2][2] = ;
printf("%x, %x, %d", a, *a, *a);
return 0;
输出:
-
我们没有学过这种方法,我们从一开始就不知道原理。
二维数组实际上是数组的数组,因此指向二维数组的指针是指向数组的指针。 考虑到这一点,选择返回类型很简单。 >>>More
这显然是一个二维数组,二维数组可以看作是一维数组,for(i = 0; ifor(j = 0; j < n; j++)printf("%d",a[i][j) >>>More
new 是 C++ 中动态应用于堆内存的函数。
如果你想在 C 语言中使用 malloc,它包含在头文件 stdlib 中。 >>>More