我应该如何理解两个字符串的数组?
FrameworkPropertyMetadata
这个问题可能不正确,但是我很难理解它的工作原理
答案 0 :(得分:4)
S1.c
有3个字节的空间,S1.s
是指向字符串的指针。
第一部分定义结构:
struct S1 {
char c[3], *s;
};
下一部分将创建此类型的实例,并使用一些值对其进行初始化:
static struct S1 s1 = {"abc", "def" };
static不是结构定义的一部分。它指的是实例变量的可见性。
答案 1 :(得分:2)
第一个初始化程序"abc"
将这3个字符复制到成员char c[3]
中。字符串终止符没有空间,因此它是一个简单的数组,不能视为字符串。
第二个初始化程序"def"
将指针复制到成员char *s
中。它指向放置在只读内存中的字符串文字 "def"
。可以将其视为字符串,但不能修改。
答案 2 :(得分:1)
初始化器{"abc", "def" }
不是数组。在这种情况下,它用于初始化该结构的实例。
答案 3 :(得分:1)
这不是相同的代码,但是可能有助于了解发生了什么,首先是不是数组。该结构包含2个元素。
#include <stdio.h>
struct S1 {
char c[3];
char* s;
};
int main(void) {
struct S1 s1 = { .c = "abc", .s = "def" };
printf("s1.c: %.*s\n", 3, (char*) s1.c);
printf("s1.s: %s\n", s1.s);
}