8.结构体的使用 2015.12.3

***************************************************************************************************************************

8.结构体的使用  2012.3.20

***************************************************************************************************************************

#include "string.h"
#include "iostream"
using namespace std;

struct Student
{
	int sid;
	char name[20];
	int age;
};//结构体末尾分毫不能省略。。。

void main()
{
	struct Student st = {7911,"lose ",12};
	printf("%d %s    %d\n",st.sid,st.name,st.age);//控制输出的格式
	cout<<st.sid<<"    "<<st.name<<"    "<<st.age<<endl;//控制输出的格式

	//结构体中属性值的修改
	st.sid = 95287;
	//st.name = "lost all";//字符串的赋值不能这样的    error!!!
	strcpy(st.name,"lo");//字符串赋值的方式进行复制
	st.age = 99;
	printf("%d    %s    %d\n",st.sid,st.name,st.age);
}

struct Student st={1111111,"2222222",3333333}

struct Student *pst=&st;

则有:

st.sid=100

pst->sid=100    两种方式效果相同

************************************************************

#include "string.h"
#include "iostream"
using namespace std;

struct Student
{
	int sid;
	char name[20];
	int age;
};//结构体末尾分毫不能省略。。。

void f(struct Student *pst);//函数的方式对结构体进行赋值
void g1(struct Student st);
void g2(struct Student *st);

void main()
{
	struct Student st;
	cout<<"initial st    "<<&st<<endl;
	f(&st);
	//方法二输出:
	g2(&st);
	//方法一输出,特点是耗内存,耗时间
	g1(st);//相当于又开辟了一个内存空间

}

void f(struct Student *pst)
{
	//指针的方式进行赋值
	pst->sid=1111111;
	strcpy(pst->name,"pst_name");
	pst->age=200;
	cout<<"f *pst  "<<&(*pst)<<endl;
	cout<<"f  pst  "<<pst<<endl;//这里有指针的内容//pst放的是指针的地址   是地址   *pst就是代表整个结构体的(不能直接输出的,cout<<*pst,error) &(*pst)是取出结构体(*pst)的首地址  这个值和pst存放的地址值是一样的。。。
}

void g2(struct Student *st)
{
	printf("%d  %s  %d  \n",st->sid,st->name,st->age);
	st->sid = 666;//方法二中改变sid值
	cout<<st->sid<<endl;
	cout<<"g2 *st    "<<&(*st)<<endl;
	cout<<"g2  st    "<<&st<<endl;
}

void g1(struct Student st)
{
	printf("%d  %s  %d  \n",st.sid,st.name,st.age);
	cout<<"g1  st    "<<&st<<endl;
	//"在方法二种对sid的值进行修改,而二中的值并没有发生变化"
}

结果:

initial st    0012FF2C
   f *pst   0012FF2C
    f  pst   0012FF2C
1111111  pst_name  200
666
 g2 *st    0012FF2C
 g2  st    0012FEDC
666  pst_name  200
 g1  st    0012FEC4

时间: 2024-11-06 03:57:39

8.结构体的使用 2015.12.3的相关文章

OC中常见的结构体,以及NSNumber、NSValue、NSDate的使用

常见的结构体 1 NSPoint和CGPoint 2 NSSize和CGSize 3 NSRect 和 CGRect NSPoint和CGPoint的使用 1 NSPoint和CGPoint是同义的 2 typedef CGPoint NSPoint; 3 CGPoint的定义 4 struct CGPoint{ 5 CGFloat x; 6 CGFloat y; 7 } 8 9 typedef struct CGPoint CGPoint; 10 typedef double CGFloat;

黑马程序员学习笔记--------C语言变量类型,结构体,枚举

本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 一.变量类型 变量分为全局变量和局部变量. 首先说明一下局部变量的特点 1> 定义:在函数内部定义的变量,称为局部变量.形

黑马程序员-----结构体数组

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲  结构体数组 一.结构体数组的概念       数组的元素也可以是结构类型的.因此可以构成结构型数组.结构数组的每一个元素都是具有相同结构类型的下表结构变量.在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体.如一个班的学生

结构体的内存空间分配及字节对齐

关于内存对齐 一: 1.什么是内存对齐 假设我们同时声明两个变量: char a; short b; 用&(取地址符号)观察变量a, b的地址的话,我们会发现(以16位CPU为例): 如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004. 那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了?答案就是它确实没被使用.因为CPU每次都是从以2字节(16位CPU)或是4字节(32位CPU)的整数倍的内存地址中读进数据的.如果变量b的地址是0x0001的话,那

结构体的内存空间分配原理

关于内存对齐 一: 1.什么是内存对齐 假设我们同时声明两个变量: char a; short b; 用&(取地址符号)观察变量a, b的地址的话,我们会发现(以16位CPU为例): 如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004. 那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了?答案就是它确实没被使用.因 为CPU每次都是从以2字节(16位CPU)或是4字节(32位CPU)的整数倍的内存地址中读进数据的.如果变量b的地址是0x0001的话,

结构体和它在链表中的使用

一.结构体 由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的. 1.1如何声明结构体呢? struct 结构体名  //结构体名字用作结构体类型的标志 {成员列表}; 比如: 1 struct student 2 { 3 int num; //2 4 char name[20]; //20 5 char sex; //1 6 int age; //2 7 float score; //4 8 char addr[30]; //30 9 }; 注意:声明只是指定了一

计算结构体大小

char类型的长度被定义为一个8位字节,这很简单. short类型的长度至少为两字节.在有些计算机上,对于有些编译程序,short类型的长度可能为4字节,或者更长. int类型是一个整数的“自然”大小,其长度至少为两字节,并且至少要和short类型一样长.在16位计算机上,int类型的长度可能为两字节:在32位计算机上,可能为4字节:当64位计算机流行起来后,int类型的长度可能会达到8字节.这里说的都是“可能”,例如,早期的Motorala 68000是一种16/32位的混合型计算机,依赖于不

【转】结构体的内存空间分配原理

关于内存对齐 一: 1.什么是内存对齐 假设我们同时声明两个变量: char a; short b; 用&(取地址符号)观察变量a, b的地址的话,我们会发现(以16位CPU为例): 如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004. 那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了?答案就是它确实没被使用.因 为CPU每次都是从以2字节(16位CPU)或是4字节(32位CPU)的整数倍的内存地址中读进数据的.如果变量b的地址是0x0001的话,

【2017-07-01】Linux应用开发工程师面试问题记录之二:关于结构体的大小及内存对齐问题

Tencent后台服务器开发有一道题是计算一个结构体的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char m_Flag; } 系统为32位的Unix机器,请问sizeof(strData)的值是多少? 在32位系统中,int类型为4个字节,char类型为1个字节,short为2个字节,所以理论上上述结构体占用的空间总共为8个字节: 但是,内存存放数据时如果各种类型合理对齐时,cpu访问数据的效率就比较高: