關(guān)于struct和對象之間的區(qū)別是什么旭愧?
首先看一下代碼:
//定義一個結(jié)構(gòu)體
struct person {
char *name;
int age;
};
// 結(jié)構(gòu)體創(chuàng)建和賦值
struct person p = {.name = "boy", .age = 1};
struct person p1 = p;
p1.name = "girl";
p1.age = 2;
printf("p name = %s p age = %d", p.name, p.age);
printf("p1 name = %s p1 age = %d", p1.name, p1.age);
//對象創(chuàng)建和賦值
Person *p2 = [[Person alloc] init];
p2.name = @"小明";
p2.age = 3;
Person *p3 = p2;
p3.name = @"小紅";
p3.age = 4;
NSLog(@"p2 = %@", p2.name);
NSLog(@"p3 = %@", p3.name);
打印結(jié)構(gòu)如下:
image.png
創(chuàng)建出來結(jié)構(gòu)體p究反,賦值給結(jié)構(gòu)體p1田轧,修改p1的值并不會影響到結(jié)構(gòu)體p舟奠。
創(chuàng)建出來的對象p2竭缝,賦值給對象p3,修改p3的值時p2會跟著p3一起改變沼瘫。
結(jié)構(gòu)體使用的是copy抬纸,而對象使用的是引用。
創(chuàng)建結(jié)構(gòu)體p1的時候是從p的內(nèi)存地址拷貝了一份到新的內(nèi)存空間耿戚。
創(chuàng)建對象p3的時候湿故,將p3的指針指向了P2的地址。
所以結(jié)構(gòu)體的值是不會跟隨改變膜蛔,而對象的值是會跟隨著改變的坛猪。
本文只是為了交流和學(xué)習(xí),如果有問題歡迎評論指出和交流皂股。