我们如何通过结构指针获取数组元素的地址?
我有一个示例代码如下:
#include<stdio.h>
#include<string.h>
typedef struct {
int mynam ;
} transrules;
typedef struct {
int ip ;
int udp;
transrules rules[256];
}__attribute__ ((__packed__)) myudp;
myudp udpdata ;
myudp* ptrudp = &udpdata ;
int main(){
memset (&udpdata , 0 ,sizeof(udpdata));
ptrudp->ip = 12 ;
ptrudp->udp = 13 ;
ptrudp->rules[0].mynam = 15 ;
printf("%d",ptrudp->rules[0].mynam);
return 0;
}
我的函数希望将规则[0]的地址作为参数传递。是否可以打印规则[0]的地址或事实上任何即规则[n]?
答案 0 :(得分:4)
是否可以打印规则[0]的地址或作为 事实上任何规则[n]
是的,可能:
printf("%p\n", (void *) &ptrudp->rules[i]); /* Cast required by %p. */
您可以将指针rules[i]
传递给您的函数。
答案 1 :(得分:0)
指向结构的指针指向结构,因此元素的地址仍然可用。
f(&ptrudp->rules[n]);
答案 2 :(得分:0)
是。您可以像通常使用任何其他数组一样访问它,只需使用->
运算符从结构中获取它:
transrules *addr = &ptrudp->rules[n];