结构体之理解
来源:互联网 发布:什么打字软件好 编辑:程序博客网 时间:2024/06/07 02:26
结构体
1、结构体成员名可以与程序中名称相同,两者代表不同的对象。
2、结构体变量做函数参数时是值传递。
3、成员的引用形式为结构体变量.成员名、结构体指针变量->成员名、(*结构体指针变量).成员名。
4、结构体成员在内存中顺序存放,但是结构体成员的内存分配却不一定是连续的(跟对齐方式有关,详见结构体内存分配分析)。
程序员面试宝典上一道题目
看下面这道题目,找出其中的3个错误,并且写出其输出值。
#include <iostream>#include <stdio.h>#include <string.h>#include <conio.h>using namespace std;struct S{int i;int *p;float t1;char t2;char t3;};void main(){S s;cout<<sizeof(s)<<endl;//1 int *p=&s.i;p[0]=1;p[1]=5; p[2]=66;p[3]=65;p[4]=67;//2 cout<<&p<<" "<<p<<" "<<*p<<endl;//3 cout<<p[0]<<" "<<s.i<<endl;//4cout<<&p[0]<<" "<<&s.i<<endl;//5cout<<p[1]<<" "<<s.p<<" "<<endl;//6cout<<&p[1]<<" "<<&s.p<<" "<<&s.p[0]<<" "<<endl;//7cout<<s.p[0]<<" "<<*s.p<<endl;//8s.p=p;s.p[1]=1;s.p[0]=2;//9system("pause");}代码注释
//1 根据对齐方式,可以得到所占空间大小//2 虽然结构体有5个成员变量,但并能表示可以使用指针给5个内存地址赋值,因为每个变量所占空间和使用指针表达出的空间大小不一定相同。例如s.t2在内存中只占一个字节,而p[3]在内存中占4个字节。指针变量p指向结构体变量成员s.i,由于现在程序总共申请的空间大小为sizeof(s),所以当使用指针给未申请的空间赋值时,程序出错。//3 &p表示指针变量p自身的地址,p表示所指向内容的地址,*p表示所指向的内容//4 p[0]表示地址(p+0)中的内容,也就是*(p+0)//5 &p[0]表示地址(p+0*sizeof(int*))//6 p[1]表示地址(p+1)中的内容,也就是*(p+1) 注:这个“1”并不是1个字节,而是1个int*类型所占的空间的字节数,即sizeof(int*)//7 &s.p[0]表示指针变量s.p所指向的内容的地址,也就是s.p变量自身所存储的值。即&s.p[0]==s.p//8 出错,因为此时并未给地址0x00000005赋值,所以不能访问此地址中的内容。//9 出错,因为s.p[1]=1已经把s.p指向的地址更改为了0x00000001,对一个未作声明的地址直接进行访问会出错。
- 结构体之理解
- 《深入理解Nginx》笔记之ngx_event_pipe_s结构体
- 《深入理解Nginx》笔记之 ngx_mail相关结构体
- 结构体 理解
- 如何理解结构体
- 结构体的理解
- 深入理解PHP之源码目录结构
- 深入理解PHP之源码目录结构
- 设计模式之结构型模再理解
- 深入理解计算机系统之存储器层次结构
- CSAPP之栈帧结构理解
- 深入理解PHP原理之变量结构
- 深入理解PHP之源码目录结构
- list_head结构体的理解
- 深入理解结构体指针
- 结构体大小“再理解”
- struct结构体各部分理解
- 结构体的简单理解
- QT编程----事件(一)
- Google拒删性爱视频遭欧洲名人起诉
- Java中的字符处理常用方法
- Linux - 如何查看USB设备信息
- 你好,Django之Writing your first Django app, part 1(记录文档)
- 结构体之理解
- Java多线程机制知识点
- PKU ACM 3274 数组hash
- ckeditor工具栏配置
- 输入输出流java知识点
- 百度一日内遭三家互联网巨头叫板
- android学习---拨打电话
- How do I disable video thumbnails in Windows 7?
- VMware三种网络方式比较