如何处理带有指针的二维数组,以及如何在 C 中使用指针而不是二维数组

发布于 科技 2024-07-02
11个回答
  1. 匿名用户2024-01-30

    int a[3]][4] = ;

    int *p;

    p =&a;

    就是这样。。。 首先,错误是你没有在第二行添加它;

    另外,您没有在 a& 之前添加地址运算符

  2. 匿名用户2024-01-29

    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;跳。

  3. 匿名用户2024-01-28

    int a[3][4] = ;再来一个]。

    int **p;对二维数组使用二维指针。

    p = a;

  4. 匿名用户2024-01-27

    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]。

  5. 匿名用户2024-01-26

    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]。

  6. 匿名用户2024-01-25

    设二维数组为 typename a[m][n],则指向数组的指针为 typename (*p)[n] = a; 这使得使用 p 而不是二维数组成为可能。

  7. 匿名用户2024-01-24

    根据您的具体应用,有几种方法可以做到这一点:

    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

  8. 匿名用户2024-01-23

    1.首先,我们在计算机中打开C语言软件,创建一个新项目。 C 文件、输入头文件和 main 函数。

    2.然后我们进入图表**来初始化数组并定义变量类型。

    3. 然后我们进入图表**,用for语句实现数组的访问。

    4.然后我们输入图表**进行输出。

    5.然后我们输入图**进行编译运行,我们可以通过辅助指针操作二维数组。

  9. 匿名用户2024-01-22

    要通过辅助指针访问 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;

    使用二维指针访问二维数组主要用于函数调用。

    对于一维数组,如果函数参数是一维指针,则可以直接使用数组名称作为函数参数。 但是,如果函数参数是二维指针,则直接使用二维数组名称作为参数,则会出现访问错误,因为二维指针和二维数组的访问方式不同,需要像示例中那样进行转换。

  10. 匿名用户2024-01-21

    以下是我的理解:

    A 是一个二维数组,即一个二级指针,那么 a 表示指向数组头部的二级指针,*a 表示指向数组头部的第一级指针,**a 表示第一个数组元素。 因为二维数组只是内存地址上一维数组的连续表示,所以 a 和 *a 之间的区别在于它们具有不同的有效范围,分别是数组的两个维度的维度。

    所以 a 和 *a 都是指向数组标头的指针,它们都指向第一个元素,因此输出地址是相同的。

    已确认:包括

    int main()

    int a[2][2] = ;

    printf("%x, %x, %d", a, *a, *a);

    return 0;

    输出:

  11. 匿名用户2024-01-20

    我们没有学过这种方法,我们从一开始就不知道原理。

相关回答
19个回答2024-07-02

二维数组实际上是数组的数组,因此指向二维数组的指针是指向数组的指针。 考虑到这一点,选择返回类型很简单。 >>>More

12个回答2024-07-02

大多数语言都以类似的方式使用数组,具有循环流控制。 >>>More

11个回答2024-07-02

这显然是一个二维数组,二维数组可以看作是一维数组,for(i = 0; ifor(j = 0; j < n; j++)printf("%d",a[i][j) >>>More

9个回答2024-07-02

new 是 C++ 中动态应用于堆内存的函数。

如果你想在 C 语言中使用 malloc,它包含在头文件 stdlib 中。 >>>More

4个回答2024-07-02

**修改如下:

#include >>>More