c – 使用双指针实现二维数组

c – 使用双指针实现二维数组,第1张

概述请考虑以下代码: #include <stdio.h>#include <stdlib.h>#define NUM_ARRAYS 4#define NUM_ELEMENTS 4#define INVALID_VAL -1int main(){ int index = INVALID_VAL; int array_index 请考虑以下代码:
#include <stdio.h>#include <stdlib.h>#define NUM_ARRAYS     4#define NUM_ELEMENTS   4#define INVALID_VAL   -1int main(){   int index            = INVALID_VAL;   int array_index      = INVALID_VAL;   int **ptr            = NulL;   ptr = malloc(sizeof(int*)*NUM_ARRAYS);   if (!ptr)   {      printf ("\nMemory Allocation Failure !\n\n");      exit (EXIT_FAILURE);   }   for (index=0; index<NUM_ARRAYS; index++)   {      *(ptr+index) = malloc(sizeof(int)*NUM_ELEMENTS);       if (!*(ptr+index))      {         printf ("\nMemory Allocation Failure !\n");         exit (EXIT_FAILURE);      }   }   /* Fill Elements Into This 2-D Array */   for (index=0; index<NUM_ARRAYS; index++)   {      for (array_index = 0; array_index<NUM_ELEMENTS; array_index++)      {         *(*(ptr+index)+array_index) = (array_index+1)*(index+1);      }   }   /* Print Array Elements */   for (index = 0; index<NUM_ARRAYS; index++)   {      printf ("\nArray %d Elements:\n",index);      for (array_index = 0; array_index<NUM_ELEMENTS; array_index++)      {         printf (" %d ",*(*(ptr+index)+array_index));      }      printf ("\n\n");   }   return 0;}

我的代码没有问题.它工作正常.

Output:Array 0 Elements: 1  2  3  4 Array 1 Elements: 2  4  6  8 Array 2 Elements: 3  6  9  12 Array 3 Elements: 4  8  12  16

我有一个关于指针算术的问题:

*(ptr 0)=指向COMPLETE BLOCK的指针(第一个数组)
*(ptr 1)=指向COMPLETE BLOCK(第二个数组)的指针.

但是:(* ptr 1)?

GDB输出:

(gdb) p *(*ptr+1) = 2(gdb) p *(*ptr+2) = 3(gdb) p *(*ptr+3) = 4(gdb) p *(*ptr+4) = 0

我对此感到困惑.请给我一些解释来解决这个疑问.

解决方法 *(ptr i)等于ptr [i]和
*(ptr 1)是ptr [1].

你可以认为,二维数组是数组的数组.

> ptr指向完成2-D数组,因此ptr 1指向下一个2-D数组.

在下图中,ptr是2-D,列数是3

由Kerrek SB先生制作的原始图,here,您还应该检查!

+===============================+==============================+====|+---------+----------+--------+|+----------+---------+--------+|||ptr[0,0] | ptr[0,1] | ptr[0,2]|||ptr[1,0] |ptr[1,1] | ptr[1,2]|| ...|+---------+----------+--------+++----------+---------+--------++ ...|            ptr[0]             |           ptr[1]              |+===============================+===============================+====   ptr

*(* ptr 1)= *(ptr [0] 1)= ptr [0] [1]

了解以下内容:

ptr指向完成2-D.

* ptr = *(ptr 0)=第一行的ptr [0].

* ptr 1 = ptr [1]表示第二行

*(* ptr 1)= *(*(ptr 0)1)= *(ptr [0] 1)= ptr [0] [1]

Array 0 Elements:1  2  3  4

和GDB输出:

(gdb) p *(*ptr+1) = 2

这是正确的2这可以使用ptr [0] [1]来读取.

总结

以上是内存溢出为你收集整理的c – 使用双指针实现二维数组全部内容,希望文章能够帮你解决c – 使用双指针实现二维数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存