对于C中的数组指针,我有一个看似简单的问题。我正在尝试理解用C编写的一部分代码,这样我就可以将它移植到C#。数据类型和函数定义如下:
/* header file */
/* definition of data_t type */
typedef unsigned short uint16_t;
typedef uint16_t data_t;
/* the function the type data_t is used */
#define FOO(d) do {
d[0] = 1;
d[1] = 2;
} while (0)
/* source file */
/* the function where FOO is used */
static int BAR(data_t* const data)
{
FOO(data + 1);
}调用FOO(..)在BAR(..)中,"data + 1“是什么意思?据我所知,数据是来自data_t类型的数组,我无法找到关于堆栈溢出的确切示例,因此我对它的含义感到困惑。在我的脑海中,我有三个选择:如何在C#中进行适当的分配:
第一个选择对我来说是有意义的。但是,当查看FOO(..)函数时,这是没有意义的,因为FOO使用的是像数组一样的“数据”。
有人能给我个提示吗?
谢谢,
迈克尔
发布于 2015-11-18 15:50:21
在C语言中,指针和数组通常是可互换的。
在大多数情况下,data_t*等同于data_t[],并且使用数组表示法来简化对赋值指针的取消引用。
data[0] = 1;
data[1] = 2; 可以用
*(data) = 1;
*(data+1) = 2;虽然宏的使用很糟糕,但它确实只是语义。无论哪种方式,您都可以访问超出范围的内存位置,并在访问未分配的内存时造成麻烦。
更新:
*(data+1) != data + 1data + 1 -指针数据+1*(指针的数据类型的大小)上的内存位置。换句话说,它是与数据位置相隔的一个单位。
*(data + 1) -在所述数据类型的内存位置的值。
发布于 2015-11-18 15:50:35
在这方面:
data + 1指:
data + sizeof(data_t);因为data是一个类型的指针,所以应用data_t指针算法,使得+ 1比data更多地生成sizeof(data_t)字节。
所以你的第一个假设是正确的。
https://stackoverflow.com/questions/33784400
复制相似问题