#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 – 使用双指针实现二维数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)