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

はい。他の配列で通常行うようにアクセスします。->演算子を使用して構造体から取得するだけです。

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

構造体へのポインターは構造体を指すため、要素のアドレスは引き続き使用できます。

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