C語言筆記-指標(3) 結構複製,陣列創造與別名

要複製結構體,只需要一個等號就可以完成。

#include <assert.h>

typedef struct{
 int a,b;
 double c,d;
 int *e;
}test;

int main(int argc, char **argv){
    test s1={
    .b=1,
    .c=2,
    .d=3,
    .e=(int[]){4,5,6}
    }; 
    test s2=s1;
    s1.b=15;
    s1.c=55;
    s1.e[0]=7;

    assert(s2.a==0);
    assert(s2.b==1);
    assert(s2.c==2);
    assert(s2.d==3);
    assert(s2.e[0]==7);
 }

這些斷言都會通過
    這個demo可以發現 修改s1.b s1.c並不會影響s的b c值,所以這些數據是創建一份複製。
    但是指標的複製仍然是只向原先結構內的數據,所以修改s1.e時s2.e也會跟著改變,解決辦法就是在結構有指標的時候用函數進行複製。
_

指標指向一個陣列:


#include <assert.h>

int main(){
 int abc[]={1,2,4};
 int *copy=abc;
 copy[0]=5;
 assert(abc[0]==5); 
}

指標被修改,則原陣列內容也被修改









此文章內容參考"21 century c"一書,在此做筆記
如須刪除請告知 謝謝

這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

C語言筆記-文本處理(1) 善用 asprintf取代sprintf