解释这个C数组语法

时间:2010-11-16 15:34:05

标签: c arrays syntax

我正在研究的学习资源中有一段代码。我遇到了一些与数组相关的语法,如果有人能向我解释,我将不胜感激。

1)

AudioBufferList *bufferList;

        bufferList = (AudioBufferList *) malloc (
                                                 sizeof (AudioBufferList) + sizeof (AudioBuffer) * (channelCount - 1)
                                                 );

第1行我理解。我不明白的是来自sizeof的所有内容。我知道的唯一价值是channelcountsizeof在这里做什么以及AudioBufferListAudioBuffer可以传递给它的大小值是多少?有不变的价值观吗?

2)


 bufferList->mNumberBuffers = channelCount;

        // initialize the mBuffers member to 0
        AudioBuffer emptyBuffer = {0};
        size_t arrayIndex;
        for (arrayIndex = 0; arrayIndex < channelCount; arrayIndex++) {
            bufferList->mBuffers[arrayIndex] = emptyBuffer;
        }

        // set up the AudioBuffer structs in the buffer list
        bufferList->mBuffers[0].mNumberChannels  = 1;
        bufferList->mBuffers[0].mDataByteSize    = totalFramesInFile * sizeof (AudioUnitSampleType);
        bufferList->mBuffers[0].mData            = soundStructArray[audioFile].audioDataLeft;

        if (2 == channelCount) {
            bufferList->mBuffers[1].mNumberChannels  = 1;
            bufferList->mBuffers[1].mDataByteSize    = totalFramesInFile * sizeof (AudioUnitSampleType);
            bufferList->mBuffers[1].mData            = soundStructArray[audioFile].audioDataRight;
        }

->做什么?

size_t是什么意思?

同样是mBuffers某种系统常数?

4 个答案:

答案 0 :(得分:3)

这不是客观C而只是C

sizeof返回数据类型的大小(由编译器静态)

维基百科参考:

答案 1 :(得分:1)

这几乎只是c语法,如果你对这段代码感到困惑,那么你应该对c有一个很好的参考。我可以推荐一个很好的参考:C A Reference Manual.

,而不是解释各个位

答案 2 :(得分:0)

正如其他一些海报所指出的,这比客观C更多。抓住一本好的C入门书(K&amp; R的C书总是一个不错的选择)可能会有所帮助。但是,回答一些问题:

  

我不明白的是“sizeof”的所有内容。我知道的唯一价值是“channelcount”。 sizeof在这里做什么以及AudioBufferList和AudioBuffer可以传递给它的大小值是多少?有不变的价值观吗?

sizeof是一个C运算符(尽管它看起来像一个函数),它返回给定数据类型的字节大小。 malloc是一个分配内存的函数,因此该行基本上是“为AudioBufferListAudioBuffer分配足够的内存,以及我需要的通道,并返回指向已分配的内存记忆区域“。

  

“ - &gt;”是什么办?

它通过指针获取结构的成员。在C中,struct有点像Objective-C对象:它有成员,它们基​​本上就像Objective-C中的实例变量。在Objective-C中,如果要调用方法myValue,则需要[obj myValue];在C中,如果你有一个指向结构的指针并希望获得值my_value,那么你需要obj->my_value,这与(*obj).my_value基本相同,这就是说“得到obj指向的对象,并在其中找到成员my_value

  

“size_t”是什么意思?

size_t是一种常见的C数据类型。它在大多数平台上都是“typedef”,是unsigned intunsigned long,它用于以独立于平台的方式表示对象的大小。

  

“mBuffers”也是某种系统常量吗?

没有;它是bufferList的成员(请记住,有点像实例变量),可能是AudioBufferList数据类型。

答案 3 :(得分:0)

从上面提到的伟大评论和阅读开始,这是必须学习的,也许不值得一提的是您尝试理解的代码是 CoreAudio 代码,一个完全用 plain-C 编写的API,虽然它本身远非普通。

您可能会发现有助于阅读的其他文献可能是:

Adamson / Avila:学习核心音频 适用于Mac和iOS的音频编程动手指南

ISBN-13:978-0321636843

ISBN-10:0321636848

希望这可以促进你的学习曲线。