thi*_*his 2 c struct pointers dereference
出于特定原因,我想通过取消引用结构的指针来仅访问结构的第一个成员.
我想知道这是否合法,或者在某些情况下是否会导致UB; 什么是正确的解决方案,如果这个有任何问题.
谢谢.
#include <stdio.h>
#include <stdlib.h>
typedef struct test_s
{
void * data ;
struct test_s * next ;
} test_t ;
int main( void )
{
test_t * t = calloc( 1 , sizeof( test_t ) ) ;
int n = 123;
t->data = &n ; //int is used only for an address, this could be anything, an object for example
void ** v = ( void* )t ;
printf("Address of n: %p\nAddress of *t: %p\n\n" , &n , *v ) ; //dereference the pointer to struct to access its first member
return 0;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
是的,这是合法的.从C99,6.7.2.1.13:
指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.