更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C指针——指针和结构类型的关系

  • 发布:C++培训
  • 来源:资料库
  • 时间:2020-10-21 15:01

可以声明一个指向结构类型对象的指针。

struct MyStruct

{

int a;

int b;

int c;

};

struct MyStruct ss={20,30,40};

//声明了结构对象ss,并把ss 的成员初始化为20,30 和40。

struct MyStruct *ptr=&ss;

//声明了一个指向结构对象ss 的指针。它的类型是

//MyStruct *,它指向的类型是MyStruct。

int *pstr=(int*)&ss;

//声明了一个指向结构对象ss 的指针。但是pstr 和

//它被指向的类型ptr 是不同的。

请问怎样通过指针 ptr 来访问 ss 的三个成员变量?

答案:

ptr -> a; //指向运算符,或者可以这们 (*ptr).a,建议使用前者

ptr -> b;

ptr -> c;

又请问怎样通过指针pstr 来访问ss 的三个成员变量?

答案:

*pstr; //访问了 ss 的成员 a。

*(pstr +1);//访问了 ss 的成员 b。

*(pstr +2); //访问了 ss 的成员 c。

虽然我在我的 MSVC++6.0 上调式过上述代码,但是要知道,这样使用 pstr 来访问结构成员是不正规的,为了说明为什么不正规,让我们看看怎样通过指针来访问数组的各个单元:(将结构体换成数组 )

int array[3]={35,56,37};

int *pa=array;

//通过指针pa 访问数组array 的三个单元的方法是:

*pa; //访问了第0 号单元

*(pa+1); //访问了第1 号单元

*(pa+2); //访问了第2 号单元

从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样。

所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个"填充字节",这就导致各个成员之间可能会有若干个字节的空隙。

所以,在例十二中,即使 *pstr 访问到了结构对象 ss 的第一个成员变量 a,也不能保证 *(pstr+1)就一定能访问到结构成员 b。因为成员 a 和成员 b 之间可能会有若干填充字节,说不定 *(pstr+1)就正好访问到了这些填充字节呢。这也证明了指针的灵活性。要是你的目的就是想看看各个结构成员之间到底有没有填充字节,嘿,这倒是个不错的方法。

不过指针访问结构成员的正确方法应该是像例十二中使用指针 ptr 的方法。

当你还在担心能否就业时,达内学员提前被企业录取;当你转辗于各大招聘会时,达内学员收到了高薪offer;当你在各大招聘网站投递简历时,达内学员中有人一毕业进入五百强名企。所以选择很重要。找C++培训班,选达内就对了。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C指针——数组和指针的关系
下一篇:C指针——指针类型转换

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省