[转载:答错了]取结构体变量的便宜量.

运行下列C++代码,输出什么?

struct Point3D

{

        int x;

        int y;

        int z;

};

int _tmain(int argc, _TCHAR* argv[])

{

        Point3D* pPoint = NULL;

        int offset = (int)(&(pPoint)->z);

        printf("%d", offset);

        return 0;

}

答案:输出8。由于在pPoint->z的前面加上了取地址符号,运行到此时的时候,会在pPoint的指针地址上加z在类型Point3D中的偏移量8。由于pPoint的地址是0,因此最终offset的值是8。

&(pPoint->z)的语意是求pPoint中变量z的地址(pPoint的地址0加z的偏移量8,并不需要访问pPoint指向的内存。只要不访问非法的内存,程序就不会出错。

时间: 2024-10-12 17:21:01

[转载:答错了]取结构体变量的便宜量.的相关文章

用结构体变量和指向结构体变量的指针构成链表

测试描述:建立一个简单的静态链表,它由3个学生数据的结点组成.输出各结点中的数据. 代码如下: #include <iostream> using namespace std; struct Student { int num; float score; Student *next; }; int main() { Student a,b,c,*head,*p;//都是Student类型的结构体变量 a.num=1001;a.score=89.5; b.num=1002;b.score=90.

对于结构体变量赋值的误区

以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对.于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题.还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不对,原因就和之前他理解的一样. 于是晚上到住处在网上查了一下,说是可以的,因为是同样的数据类型,而C

C的日记-结构体变量和结构体数组

[结构体] 定义结构体的两方式    <1>    struct student{};        struct student a={10001,"云中",'M',"北京"};    <2>    struct student{        }a={10001,"云中",'M',"北京"};定义结构体数组a换成a[],struct student stu[3]={{..},{..},{..}};

C语言结构体变量字节对齐问题总结

结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐. 内存对齐的原因: 1)某些平台只能在特定的地址处访问特定类型的数据: 2)提高存取数据的速度.比如有的平台每次都是从偶地址处读取数据,对于一个int型的

全局结构体变量的初始化以及将结构体变量转换为char类型输出问题

#include<stdio.h> #include<stdlib.h> struct node{ int a; int b; char c; char d; }; /*struct node A; 全局变量不能在这儿进行初始化,令我震惊啊,错误让你迷茫到死 A.a=1; A.b=2; A.c='a'; A.d='c';*/ //struct node A={1,2,'a','c'};但是这种写法可以 1:初始化和赋值不是一个概念. 2:// 在全局空间(即函数体之外)只能执行数据

编程题:展示对整个结构体变量的引用的其他方法。功能:对整个结构体变量进行操作。

编程题:展示对整个结构体变量的引用的其他方法.功能:对整个结构体变量进行操作. #include<stdio.h> void main() { struct person { char name[20]; char sex; struct date {int year; int month; int day; }birthday; float height; }per1,per2={"LiPing","M",2013,12,15,175.5}; per1

编程题:对结构体变量中成员的引用展示。

编程题:对结构体变量中成员的引用展示. #include<stdio.h> void main() { struct person { char name[20]; char sex; struct date {int year; int month; int day; }birthday; float height; }per; printf("Enter the name:"); gets(per.name);per.sex='M'; per.birthday.year

结构体变量的sizeof计算

结构体字节对齐准则: 1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除: 2. 结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍,如有需要编译器会在成员之间加上填充字节: 3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节. 4. 在嵌套结构中需要把内部‘打散'后再进行对齐计算. // sizeof(结构体).cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #inc

使用结构体变量存储学生姓名和课程成绩,计算平均分及查找不及格同学姓名及分数

1 struct Student //声明Student类型结构体变量 2 { 3 char name[20]; 4 int score[5]; 5 }; 6 typedef struct Student Stu; 7 8 void main() 9 { 10 11 Stu stu[3]; 定义Student类型变量数组 12 int i,j; 13 for(i=0;i<3;i++) //输入学生姓名和成绩 14 { 15 printf("please input student[%d]'