Objective c 为什么我不能像这样使用struct?

Objective c 为什么我不能像这样使用struct?,objective-c,struct,Objective C,Struct,为什么我不能像这样使用struct typedef struct { unsigned char FirstName; unsigned char LastName; unsigned int age; } User; User UserNick = {Nick, Watson, 24}; NSLog(@"Your paint job is (R: %NSString, G: %NSString, B: %u)", UserNick.FirstName, U

为什么我不能像这样使用struct

typedef struct { unsigned char FirstName; unsigned char LastName; unsigned int age; } User;
    User UserNick = {Nick, Watson, 24};

    NSLog(@"Your paint job is (R: %NSString, G: %NSString, B: %u)",
          UserNick.FirstName, UserNick.LastName, UserNick.age);
我的意思是,我肯定使用过这样的结构:

typedef struct {unsigned char red; unsigned char green; unsigned char blue; } Color;
    Color carColor = {255, 65,0};

NSLog(@"Your paint job is (R: %hhu, G: %hhu, B: %hhu)",
    carColor.red, carColor.green, carColor.blue);

如果要使用C字符串,则需要以下代码:

typedef struct { unsigned char *FirstName; unsigned char *LastName; unsigned int age; } User;
User UserNick = {"Nick", "Watson", 24};

NSLog(@"Your paint job is (R: %s, G: %s, B: %u)",
      UserNick.FirstName, UserNick.LastName, UserNick.age);
C字符串是char*。C字符串文字必须用引号括起来。%s是C字符串的格式说明符

另一个建议是以小写字母开始字段名和变量名


既然您使用的是Objective-C,那么如果您将用户变成一个真正的类而不是结构,您可能会得到更好的结果。然后可以使用属性和适当的内存管理。名称可以是NSString而不是C字符串。这使得将对象存储在集合中变得很容易,并执行其他有用的操作,而这些操作对于普通的旧结构来说很困难。

如果要使用C字符串,则需要以下代码:

typedef struct { unsigned char *FirstName; unsigned char *LastName; unsigned int age; } User;
User UserNick = {"Nick", "Watson", 24};

NSLog(@"Your paint job is (R: %s, G: %s, B: %u)",
      UserNick.FirstName, UserNick.LastName, UserNick.age);
C字符串是char*。C字符串文字必须用引号括起来。%s是C字符串的格式说明符

另一个建议是以小写字母开始字段名和变量名

既然您使用的是Objective-C,那么如果您将用户变成一个真正的类而不是结构,您可能会得到更好的结果。然后可以使用属性和适当的内存管理。名称可以是NSString而不是C字符串。这使得将对象存储在集合中变得很容易,并执行其他使用普通旧结构很难执行的有用操作。

在您的定义中,FirstName是一个无符号字符,这意味着它是一个只能包含一个字符作为其值的变量。但是,Nick是一个字符串,即字符数组

可以

typedef struct {
     unsigned char * FirstName;
     unsigned char * LastName;
     unsigned int age;
} User;
User Nick = {"Nick", "Watson", 24};
在您的定义中,FirstName是一个无符号字符,这意味着它是一个变量,只能包含一个字符作为其值。但是,Nick是一个字符串,即字符数组

可以

typedef struct {
     unsigned char * FirstName;
     unsigned char * LastName;
     unsigned int age;
} User;
User Nick = {"Nick", "Watson", 24};

顺便说一句-为什么要使用未签名字符作为颜色?您存储的不是字符而是数字。使用uint8会是一个更好的选择。@rmaddy不是uint8 typedef'd到unsigned char吗?@NobodyNada可能是,但是使用uint8清楚地表明您想要一个8位的数字。使用char使它看起来像您想要一个字符。@rmaddy您是对的。这就是typedef存在的原因。顺便问一下,为什么要使用无符号字符作为颜色?您存储的不是字符而是数字。使用uint8会是一个更好的选择。@rmaddy不是uint8 typedef'd到unsigned char吗?@NobodyNada可能是,但是使用uint8清楚地表明您想要一个8位的数字。使用char使它看起来像您想要一个字符。@rmaddy您是对的。这就是typedef存在的原因。谢谢。我明白你的意思。很高兴我能帮上忙。作为新用户,请不要忘记接受解决您问题的答案。谢谢。我明白你的意思。很高兴我能帮上忙。作为新用户,请不要忘记接受解决您问题的答案。