网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
深入理解C语言指针奥秘系列文章之三
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
  int(*ptr);
    ptr=&array;

    上例中ptr是一个指针,它的类型是int(*),他指向的类型是int,我们用整个数组的首地址来初始化它。在语句ptr=&array中,array代表数组本身。

    本节中提到了函数sizeof(),那么我来问一问,sizeof(指针名称)测出的究竟是指针自身类型的大小呢还是指针所指向的类型的大小?答案是前者。例如:

    int(*ptr);

    则在32位程序中,有:

    sizeof(int(*))==4
    sizeof(int)==40
    sizeof(ptr)==4

    实际上,sizeof(对象)测出的都是对象自身的类型的大小,而不是别的什么类型的大小。指针和结构类型的关系,可以声明一个指向结构类型对象的指针。

    例十一:

    structMyStruct
    {
    inta;
    intb;
    intc;
    }
    MyStructss={20,30,40};
    //声明了结构对象ss,
    并把ss的三个成员初始化为20,30和40。
    MyStruct*ptr=&ss;
    //声明了一个指向结构对象ss的指针。
    它的类型是MyStruct*,它指向的类型是MyStruct。
    int*pstr=(int*)&ss;
    //声明了一个指向结构对象ss的指针。
    但是它的类型和它指向的类型和ptr是不同的。

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

    答案

    ptr->a;
    ptr->b;
    ptr->c;

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

    答案

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

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

    例十二:

    intarray={35,56,37};
    int*pa=array;

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

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

    从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样。所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个"填充字节",这就导致各个成员之间可能会有若干个字节的空隙。

    所以,在例十二中,即使*pstr访问到了结构对象ss的第一个成员变量a,也不能保证*(

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号