我试图通过使用## You need to unlist vector c and sort as below:
sort(unlist(c))
#[1] "25" "5" "and" "Chpater" "Dr." "Eggs"
#[7] "Green" "Ham" "p." "Sam-I-am!" "Seuss" "That"
宏来了解有关访问结构的问题,我遇到了这个例子How can I access structure fields by name at run time?
这一行:
offsetof()
给了我麻烦。
为什么指针被强制转换为//Set the value of 'a' using pointer arithmetic
*(int *)((char *)structp + offsetf) = 5;
然后又转回char *
?
答案 0 :(得分:3)
首先,结构指针必须转换为“字节指针”类型,因为offsetf
很可能包含所需结构字段的字节偏移。由于这种强制转换,(char *)structp + offsetf
子表达式中的指针算法以char
个对象(以字节为单位)执行,完全按照我们的意愿执行。
其次,上面的子表达式为我们提供了一个类型char *
的指针,指向所需的数据字段。但实际上,数据字段显然具有类型int
。因此,为了获得对该数据字段的访问权限,我们必须将char *
指针强制转换为正确的int *
类型。之后,我们可以使用一元*
运算符对该数据字段执行读取(或写入)访问。
在您的情况下,值5
被写入位于int
指向的对象内的字节偏移offsetf
的{{1}}数据字段。
答案 1 :(得分:0)
因为按顺序:您将引用*
内容放入int*
,以便您可以访问数据并将其设置为5
。
转换为char *是因为char *
转换为int *
很容易,因为每个char
都有一个整数值。