【发布时间】:2019-06-10 19:04:03
【问题描述】:
我正在尝试了解一些代码的实现,这些代码使用 typedef 到双精度数组并还使用指针,但我在理解代码和有关代码如何工作的详细信息以及变量是什么类型以及什么方面遇到了一些困难指向什么。
我尝试过尝试不同的实现并试图了解它是如何工作的,但我得到的结果并不是我所期望的。 这是我尝试测试的一些代码:
typedef int array[2][6];
array *arr;
arr = (array*)malloc(sizeof(array));
*arr[0][0]=2;
*arr[0][1]=4;
*arr[1][0]=3;
*arr[1][1]=5;
printf("line 1: %d %d\nline 2: %d %d\n",*arr[0][0],*arr[1][0],*arr[0][1],*arr[1][1]);
int *in = (int*) ((*arr)[0]);
printf("in = %d\n",in[1]); // results are unexpected
我实际查看的代码是用于乒乓缓冲区的,并且(简化)如下:
int buffer_count = 2; // 2 ping pong buffers
int sample_size = 15;
typedef int PingPong_t[buffer_count][sample_size];
PingPong_t *inputstream;
// logic goes here to determine pingpong_idx
int pingpong_idx = 0; // I believe this is to choose the first or second buffer
int *pcmIn = (int*)((*inputstream)[pingpong_idx]);
// do processing
我希望 pcmIn 是当前 ping 或 pong 缓冲区的整数数组,但我无法向自己证明这一点,或者我只是不确定数据类型实际上是什么以及它实际上在做什么。
我可能有一个很好的问题,输入流的类型是什么?说 inputstream 是一个指向双精度整数数组的指针是否正确?或者输入流是整数指针的双数组?
那么 pcmIn 的类型是什么?
【问题讨论】:
-
为什么第一个代码块的结果出乎意料?它在我的机器上打印
in = 2。 -
当我将索引更改为 1 时,它会打印出意想不到的结果
-
为编程语言添加标签可能会让事情变得更清晰。
-
所有
*arr[x][y]表达式都应该是(*arr)[x][y]