Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601744
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: LINUX

2013-11-30 21:14:58

 

2、结构体

功能:

A、提供一种访问内存的方法

B、对变量提供一种打包功能

C、C语言实现面向对象的一种方法

面向过程与面向对象的区别:

面向过程:要做什么?该做什么?软件该怎样运行?

面向对象:能做什么?           软件能做什么?

结构体分为有名结构体和无名结构体,无名结构体的好处就是保证它的唯一性,不能被别人使用,但是也可以在前面加typedef也能使用。

有名结构体:

typedef struct aaa{

};

无名结构体:

typedef struct {

}aaa;

可以这样定义一个结构体:

typedef struct aaa AAA;

但是习惯这样定义了:

typedef struct aaa{

}AAA *AAAP;

AAA  a//<==> struct aaa  a;对象的a

AAAP   b; //<==>struct aaa* b; 指针的b

结构体的赋值:

AAA x1 = {1, "hello", 3};

AAA x2 = {

           a:1;

           p:"hello";

           c:3;

};

AAA x3 = {

           .a = 1;

           .p = "hello";

           .c = 3;

};

②两种赋值方式差不多,但是第②中方式看起来让人更清楚,第③中方式最专业,它是GNU C对结构体的专业初始化,这种赋值的优势就在于:你可以单独对某个变量或者某些变量赋值,但是前面两中方式就不行,必须的一个一个赋值。

下面看一下下面两个定义的结构体:

typedef struct aaa{

int a;

char *p;

}AAA;

typedef struct bbb{

int a;

char p[10];

}BBB;

AAA  a = {1, “hello”};

BBB   b = {1, “hello”};

如下图:

对象a的成员p里面存放的是“hello”的地址,在字符常量区,而对象b中的成员p里面存放的是“hello”的类容,如果对他们进行复制的话,a的复制结果如aab的复制结果如bbaa中的p同样是指向“hello”的地址,而bb中存放的是“hello”的内容,这样aaa是有一定关联的,但是bbb是完全独立的,所以有可能a会销毁对象,这样aa就没办法访问“hello”了,尤其是用malloc创建的对象。

阅读(1000) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~