C提高5--結構體

以下內容爲本人看“傳智播客”C++基礎教程完整版視頻所做的筆記

結構體

結構體只是一個類型,還沒有分配空間。所以定義結構體類型時不要直接給成員賦值。只有根據其類型定義變量時,才分配空間,有空間才能賦值。
例程如下:

typedef struct
{
    char name[50];
    int age;
}Teacher;

int main()
{
    Teacher T1 ={"Lilly",22};

    //相同類型的兩個結構體變量,可以相互賦值
    //把T1成員變量內存的值拷貝給T2成員變量的內存
    Teacher T2 = T1;
    printf("%s,%d",T2.name,T2.age);
}

結構體動態數組

動態分配內存空間

Teacher *p = (Teacher *)malloc(sizeof(3*Teacher));
if(p == NULL)
{
    return -1;
}

char buf[50];

for (i=0;i<3;i++)
{
sprintf(buf,"name%d%d%d"i,i,i);
strcpy(p[i].name,buf);
p[i].age = 20+i;

}

for(i=0;i<3;i++)
{
    printf("第%d個:%s,%d\n",i+1,p[i].name,p[i].age);
}
printf("\n");

if(p != NULL)
{
    free(p);
    p = NULL;
}

結構體套一級指針

typedef struct
{
    char *name;
    int age;
}Teacher;

int main()
{
    char *name = NULL;
    name = (char *)malloc(30);
    strcpy_s(name,20,"Lilly“);
    printf("name = %s",name);
    if(name != NULL)
    {
        free(name);
        name = NULL;
    }


}
  • 這邊對strcpy_s有一個小補充
    下面是strcpy_s函數的兩種形式:
//1、三個參數
strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource );
//比如
char *str,temp[30];
*str = temp[30];
strcpy_s(str,20,"ashdskj");

//2、兩個參數
strcpy_s(char (&strDestination)[size], const char *strSource );
//比如
char str[7];
strcpy_s(str,"hello");

另一種情況:

Teacher *p = NULL;
p = (Teacher *)malloc(sizeof(Teacher));  //給結構體指針動態分配空間
p->name = (char *)malloc(30);
strcpy(p->name,"Lilly");  //要實現這一步必須有上面兩條語句

//實現上面功能後別忘了將動態分配空間的指針p和name釋放掉
if(p->name != NULL)
{
    free(p->name);
    p->name = NULL;
}
if(p != NULL)
{
    free(p);
    p = NULL;
}
發佈了25 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章