在C中定义带括号的指针?

时间:2014-01-05 13:33:35

标签: c pointers

我看到了这样的示例代码的一部分:

1 void func (uint8_t *buffer, uint16_t length)
2 {
3    uint8_t *pack = {0};
4
5    for(int i=0; i<length; i++)
6    {
7       pack[i] = buffer[i];
8    }
9    
10   // send out the "pack" here
11 }

这是一个应该填充&#34;缓冲区&#34;中的数据的函数。 to&#34; pack&#34;,然后发送&#34; pack&#34;到串行连接。

第3行有什么作用?这就像定义一个所有元素为0的结构,但它是一个指针!这个指针指向哪里?在下面的for循环中,为什​​么它可以更改为数组(pack [i])以及为什么我们不需要声明大小如下:

uint8_t pack_array[length], *pack;
*pack = pack_array;

编译器是GCC。

[编辑]:for循环中有拼写错误。

2 个答案:

答案 0 :(得分:3)

根据C99标准,6.7.8p11:

  

标量的初始值设定项应为单个表达式,可选择用大括号括起来。

术语&#34;标量&#34;是指算术类型和指针。

所以括号是允许的,什么都不做。

uint8_t *pack = {0};将使用值pack初始化指针0,因此它将是一个空指针。

以下for循环错误。两者都是因为它中的表达式顺序不正确,并且因为赋值取消引用pack,这是一个空指针。

答案 1 :(得分:0)

在您的代码段中,未为pack分配内存。在不分配内存的情况下,您不能将其用作下标数组。

for(int i=0; i++; i<length)  

错了。 i<length应该是for循环的第二个表达。