结构体指针概要

结构体指针

指针当做函数参数

数组当做函数参数

1.结构体指针

指向结构体变量的指针.称为结构体指针

Student stu ={0};

Student *p = &stu;

Student  * 结构体指针类型(类型), p结构体指针变量(变量名);

&stu 结构体变量地址(初值)

(*p).sex = ‘m’;

p->sex= ’m’;

(*p)对指针取值后是结构体变量,.sex是访问成员变量

使用指针可以指向操作符直接访问结构体成员p->sex

1.结构体指针

结构体指针变量保存的是结构体变量的首地址其本质是结构体第一个成员变量的地址

可以通过结构体指针变量加指向操作符的形式来访问每一个成员变量

对于结构体而言,定义的结构体所占的字节数,不仅与其成员的数据类型有关,也与成员顺序有关,顺序不同所占的空间大小也可能不同.

对于指针变量而言,自增运算;指针每一次偏移一个对应数据类型所占的字节数,取内容运算符操作时,也是根据指针变量所保存的
地址和指针变量的数据类型来决定从什么地址开始到多少个字节结束,这个内存范围内的数据。也是指针变量本质是保存一个存储区域的首地址的原因。结构体数组
的数组名是一个结构体指针常量。

结构体内包含指针

在定义结构体的时候,可以使用指针变量作为结构体成员,但是一定要防止结构体类型的变量在定义时,与指针变量所对应的数据是常量,如果是常量,则对其修改时会崩溃。

2.指针当作函数参数

指针可以当作函数参数

包括:一般指针作为函数参数,数组当作函数参数,结构体指针当作函数参数

传值和传址

所谓传值就是把实参的值传递给形参。

所谓传址,我们有时候需要改变实参的值,这时就需要传地址。

把地址当做函数参数传入函数。

3.数组当做函数参数

数组当作函数参数,形参仅代表数组的首地址,我们需要传入数组元素个数。

时间: 2024-10-12 09:27:30

结构体指针概要的相关文章

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

(C)struct结构体指针

结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员:其二是指向结构的指针(称为结构指针). 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点. 结构指针说明的一般形式是: struct (结构类型名称) * (结构指针变量名);例如:struct date * pdate, today;说明了两个变量,一个是指向结构date的结构指针pdate,today是一个date结构变量. 语句: struct date{ int year; int mo

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

结构体指针之 段错误 具体解释(segmentation fault)

一个网友问了我一个问题.一个C程序执行出现了段错误,这个问题非常好.非常多刚開始学习的人都easy犯这个错误,详细代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 这个编译没有问题,可是执行是段错误    Segmentation fault 由于你定义了一个结构体指针p.用来指向此类

用PostMessage或SendMessage发送结构体指针

SendMessage可以随意发送结构体指针. PostMessage则必须注意结构体的生命周期. 例如如下发送代码,使用PostMessage: struct _tag_aa { CString s1; char szBuffer[512]; int a; char* szText; }; _tag_aa *a=new _tag_aa; a->s1="ssssss11111111111111"; strcpy(a->szBuffer,"Bufferrrrrrrr

c语言中的结构体指针类型的cast

1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针,并且 在这个结构体中,第一个结构成员必须也是一个结构体(最好是结构体类型). 那么我们可以这个结构体指针转换为指向这个结构体中第一个成员结构体的指针. 直接看代码: ************************************ /* struct transform for struct

python 传递结构体指针到 c++ dll

CMakeLists.txt # project(工程名) project(xxx) # add_library(链接库名称 SHARED 链接库代码) add_library(xxx SHARED xxx.cpp) xxx.cpp #include <iostream> using namespace std; // c++ 结构体定义 struct struck_ { // 股票名,字符串 char * stock_code_; // 开盘价 double stock_open_; };