打印出值uint8_t *

以下是我的片段:

typedef struct{ uint8_t dstEndpt; uint16_t srcEndpt; uint8_t * quality; } DataIndT; DataIndT * dataIndPtr; printf("dstEndpt: 0x%02x", dataIndPtr->dstEndpt); srcEndpt); <-- print out the value of srcEndpt 

但是,我怎样才能打印出quality的价值?

如果要打印指向需要指定的值,则quality是指针或类似数组。 使用索引或取消引用它:

 printf("quality: %d", *(dataIndPtr->quality)); 

使用零索引,如果它是一个数组也应该打印值:

 printf("quality: %d", dataIndPtr->quality[0]); 

或者,如果你想要的是打印指针本身的值,那么Michal的答案就是你想要的。

要打印指针的值,请使用%p

 printf("dstEndpt: %p", (void*)dataIndPtr->quality); 

但是,我怎样才能打印出质量的价值?

你做

 printf("%p", (void*) dataIndPtr->quality); 

这将打印地址,因为指针的值是指针指向的对象的地址。


要打印指针指向的对象 ,在这种情况下,您可以使用C99可用的格式说明符(还需要包含inttypes.h )。 当然你还需要取消引用指针:

 printf("%" PRIu8 "\n", *(dataIndPtr->quality)); 

因为quality是指向uint8_t

 printf("%" PRIu16 "\n", *(dataIndPtr->srcEndpt)); 

对于uint16_t类型。

就像@Giorgi指出的那样你可以使用inttypes.h

这是一个小例子:

 #include  #include int main(void){ uint8_t a = 0; uint16_t b = 0; uint32_t c = 0; uint64_t d = 0; printf("%" PRId8 "\n", a); printf("%" PRIu16 "\n",b); printf("%" PRIu32 "\n", c); printf("%" PRIu64 "\n", d); return 0; }