![Cでの「&」の意味(ここにはLinuxカーネル機能に似たマクロがあります)[閉じる]](https://linux33.com/image/65433/C%E3%81%A7%E3%81%AE%E3%80%8C%26amp%3B%E3%80%8D%E3%81%AE%E6%84%8F%E5%91%B3%EF%BC%88%E3%81%93%E3%81%93%E3%81%AB%E3%81%AFLinux%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E6%A9%9F%E8%83%BD%E3%81%AB%E4%BC%BC%E3%81%9F%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%EF%BC%89%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
#define TCP_SKB_CB( __skb ) ((struct tcp_skb_cb *)&((__skb)->cb[0]))
&
この場合、これはどういう意味ですか?
答え1
これは標準Cの「アドレス」演算子です。上記の構造は以下を意味します。
__skb
:マクロに割り当てられたパラメータ(次を指す)struct skbuff
)(__skb)->cb
:cb
skbの配列(__skb)->cb[0]
: 配列の最初の要素&((__skb)->cb[0])
: 最初の要素のアドレス((struct tcp_skb_cb *)&((__skb)->cb[0]))
:最初の要素のアドレスで、ポインタに変換されます。struct tcp_skb_cb