我有以下来源:
/*file a2ptr.c */
#include <stdio.h>
#include <stddef.h>
typedef struct m_St m_St;
struct m_St
{
size_t idx;
size_t m_data[8];
}*x;
size_t GetSize(m_St *s)
{
s->idx=1;
return (sizeof((s->idx ? x : s)->m_data));
}
int main(void)
{
m_St s = { 0 };
printf("GetSize() returns: %zu\n", GetSize(&s));
return 0;
}
在使用 GCC 4.8.1 的 32 位 Linux 上,此代码产生以下输出:
$ gcc -Wall -Werror a2ptr.c
$ ./a.out
GetSize() returns: 32
我的问题:
是(s->idx ? x : s)->m_data
C 中的有效表达式吗?
为什么 GetSize() 返回整个数组的大小(以字节为单位)而不是指向其第一个元素的指针的大小(例如,sizeof(size_t)
)?