<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] 字符串拷貝用strcpy,字符用=就可以了,因為=拷貝字符串時候只會拷貝首地址(第一個字符),而strcpy是把字符串里每個字符一個一個拷貝過去 結構體名字用. 結構體指針用-> # 定義 ~~~ struct students { //成員列表 char name[21]; unsigned int age; char tel[16]; float scores[3]; char sex; }stu = {"尼古拉斯", 500, "15557105721", 100.0f, 200, 300, 'M'}; int main() { //按照結構體順序賦值 // struct students stu = {"尼古拉斯", 500, "15557105721", 100.0f, 200, 300, 'M'}; //每個屬性賦值 // struct students stu = {.sex = 'M', .name = "劉能", .tel = "15557105722", .scores[0] = 100, .scores[1] = 11, .scores[2] = 33, .age = 12}; //起別名賦值 // struct students stu; // //字符串需要拷貝進去,因為需要的是個數組,給字符串的話,就把地址給過去了 // strcpy(stu.name, "abc"); // stu.age = 11; // strcpy(stu.tel, "15557125722"); // stu.scores[0] = 100; // stu.scores[1] = 11; // stu.scores[2] = 33; //別名在struct起好了 // strcpy(stu.name, "abc"); // stu.age = 11; // strcpy(stu.tel, "15557125722"); // stu.scores[0] = 100; // stu.scores[1] = 11; // stu.scores[2] = 33; printf("姓名: %s\n", stu.name); printf("年齡: %d\n", stu.age); printf("電話: %s\n", stu.tel); printf("成績: %.1f %.1f %.1f\n", stu.scores[0], stu.scores[1], stu.scores[2]); printf("性別: %s\n", stu.sex == 'M' ? "男" : "女"); getchar(); return EXIT_SUCCESS; } ~~~ # 結構體大小 結構體存儲,內存對齊 ~~~ struct students { //成員列表 char name[21]; unsigned int age; char tel[16]; float scores[3]; char sex; } stu = {"尼古拉斯", 500, "15557105721", 100.0f, 200, 300, 'M'}, stu1 = {"abc", 50, "15557105721", 100.0f, 200, 300, 'M'}; int main() { printf("%d\n", sizeof(stu1)); getchar(); return EXIT_SUCCESS; } ~~~ # 結構體數組 ~~~ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> struct students { //成員列表 char name[21]; unsigned int age; char tel[16]; float scores[3]; char sex; }; int main() { struct students s[2]; for (int i = 0; i < 2; ++i) { printf("請輸入\n"); scanf("%s%d%s%f%f%f%c", s[i].name, &s[i].age, s[i].tel, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2], &s[i].sex); } for (int j = 0; j < 2; ++j) { printf("姓名: %s\n", s[j].name); printf("年齡: %d\n", s[j].age); printf("電話: %s\n", s[j].tel); printf("成績: %.1f %.1f %.1f\n", s[j].scores[0], s[j].scores[1], s[j].scores[2]); printf("性別: %s\n", s[j].sex == 'M' ? "男" : "女"); printf("----------------\n"); } getchar(); return 0; } ~~~ # 結構體和指針 **屬性指針** ~~~ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> struct stuinfo { char * name; int age; }; int main() { struct stuinfo si; si.name = (char *)malloc(sizeof(char) * 21); strcpy(si.name, "張三"); si.age = 18; printf("%s %d\n", si.name, si.age); free(si.name); getchar(); return 0; } ~~~ **指針指向結構體地址** ~~~ struct sinfo { char * name; int age; }stu; int main() { struct sinfo * s = &stu; s->name = (char *)malloc(sizeof(char) * 21); strcpy(s->name, "abc"); s->age = 11; printf("%s %d\n", s->name, s->age); free(s->name); getchar(); return 0; } ~~~ **指針指向分配的空間** ~~~ struct tec { char * name; int age; }t; int main() { struct tec * p = (struct tec *)malloc(sizeof(t)); p->name = (char *)malloc(sizeof(char) * 21); strcpy(p->name, "abc"); p->age = 121; printf("%s %d\n", p->name, p->age); if (p->name != NULL) { free(p->name); p->name = NULL; } if (p) { free(p); p = NULL; } getchar(); return 0; } ~~~ # 結構體嵌套 ~~~ struct stra { int a; float b; char c; }abc; struct strb { struct stra abc; char * e; short f; double d; }; int main() { struct strb strbb; strbb.d = 10.0f; strbb.abc.a = 100; printf("%d\n", strbb.abc.a); getchar(); return 0; } ~~~ # 結構體指針偏移 ~~~ struct Person { char a; int b; char c; int d; }; int main() { struct Person p = {'a', 100, 'b', 200}; printf("%d\n", sizeof(p)); //16 //2個相同,16-4就是p.d的地址 printf("%d\n", (char *) &p + 12); printf("%d\n", &(p.d)); return 0; } ~~~ # 堆上和棧上分配空間 ~~~ //堆上分配空間 struct Person *p1 = (Person *) malloc(sizeof(struct Person)); strcpy(p1->name, "abc"); p1->age = 11; printf("name: %s, Age: %d\n", p1->name, p1->age); //棧上分配結構體空間 struct Person persons[] = { {"aaa", 123}, {"bbb", 456}, {"ccc", 789}, {"ddd", 101112}, {"eee", 131415} }; int len = sizeof(Person) / sizeof(struct Person); ~~~ # 結構體賦值 如果結構體內部有指針,并且指針指向堆空間. 那么如果發生賦值行為,就會產生2個問題 1. 同一個空間被釋放2次 2. 內存泄露 所以不要直接=,如果內部有指針,自己按個賦值拷貝 ![](https://box.kancloud.cn/5d47d66b42ad592063bb8aa98160b52d_2114x1376.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看