以下內容爲本人看“傳智播客”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;
}