日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【C 语言】结构体 ( 结构体浅拷贝 )

發布時間:2025/6/17 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】结构体 ( 结构体浅拷贝 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、結構體淺拷貝與深拷貝
  • 二、結構體淺拷貝
  • 三、結構體淺拷貝代碼示例





一、結構體淺拷貝與深拷貝



結構體 中 嵌套了 指針 , 指針指向的內存 , 如果需要 malloc 在堆內存中 分配內存 , 如果在 該類型 結構體變量 之間互相賦值 ,

  • 如果直接賦值 , 就是淺拷貝 ;
  • 如果賦值時 , 重新為 指針變量 在堆內存中重新申請內存 , 拷貝數據 , 就是 深拷貝 ;

淺拷貝 只會 拷貝 指針變量的值 , 不會拷貝 指針變量 指向的 內存空間的 數據 ;





二、結構體淺拷貝



結構體淺拷貝 : 下面兩種方式的拷貝 , 是結構體的淺拷貝 ;

  • 直接拷貝結構體內存 :
// 結構體內存拷貝// 該拷貝是淺拷貝memcpy(to, from, sizeof (Student));
  • 使用 = 操作拷貝 : 只會將 結構體 變量的 內存 , 從 from 指針指向的地址 , 拷貝到 to 指針指向的地址 ;
// 結構體直接賦值 , 與上面的代碼作用相同// 該拷貝也是淺拷貝*to = *from;



三、結構體淺拷貝代碼示例



代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>/*** @brief The Student struct* 定義 結構體 數據類型 , 同時為該結構體類型聲明 別名* 可以直接使用 別名 結構體變量名 聲明結構體類型變量* 不需要在前面添加 struct 關鍵字*/ typedef struct Student {// 聲明變量時 , 會自動分配這 5 字節內存// 賦值時 , 可以直接使用 = 賦值字符串char name[5];int age;// 聲明變量時 , 只會為 4 字節指針分配內存// 具體的 字符串內存 需要額外使用 malloc 申請內存// 賦值時 , 必須使用 strcpy 函數 , 向堆內存賦值char *address; }Student;/*** @brief copy_student 執行淺拷貝操作* @param to* @param from*/ void copy_student(Student *to, Student *from) {// 結構體內存拷貝// 該拷貝是淺拷貝memcpy(to, from, sizeof (Student));// 結構體直接賦值 , 與上面的代碼作用相同// 該拷貝也是淺拷貝//*to = *from; }/*** @brief 主函數入口* @return*/ int main(int argc, char* argv[], char**env) {Student s1;Student s2;// 為 s1.age 賦值s1.age = 18;// 為 s1.name 賦值// 該成員是 數組 , 在 s1 結構體變量聲明時 , 就分配好了內存strcpy(s1.name, "Tom");// 給 s1.address 在堆內存分配內存s1.address = (char *)malloc(20);strcpy(s1.address, "Beijing");// 將 s1 賦值給 s2copy_student(&s2, &s1);printf("s1 : name = %s, age = %d, address = %s\n", s1.name, s1.age, s1.address);printf("s2 : name = %s, age = %d, address = %s\n", s2.name, s2.age, s2.address);// 命令行不要退出system("pause");return 0; }

執行結果 :

s1 : name = Tom, age = 18, address = Beijing s2 : name = Tom, age = 18, address = Beijing 請按任意鍵繼續. . .

總結

以上是生活随笔為你收集整理的【C 语言】结构体 ( 结构体浅拷贝 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。