5

我们如何通过结构指针获取数组元素的地址?

我有一个示例代码如下:

#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] ?

4

3 回答 3

5

是否可以打印规则 [0] 的地址或事实上任何规则 [n]

是的,有可能:

printf("%p\n", (void *) &ptrudp->rules[i]); /* Cast required by %p. */

同样的方式你可以传递一个指向rules[i]你的函数的指针。

于 2012-09-05T17:17:37.180 回答
0

指向结构的指针指向结构,因此元素的地址仍然可用。

f(&ptrudp->rules[n]);
于 2012-09-05T17:17:11.760 回答
0

是的。您可以像通常对任何其他数组一样访问它,只需使用->运算符从结构中获取它:

transrules *addr = &ptrudp->rules[n];
于 2012-09-05T17:28:42.650 回答