一个指向变量的指针表示的是占内存中起始位置

一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组

 

定义结构体变量的指针:

//假设已有一个结构体名为Student
struct Student *pStruct
// 结构体类型 * 指针名;

通过指针来引用结构体中的成员,有三种方式

demo:

 # include <stdio.h>
# include <stdlib.h>
/*
1.使用->引用结构体成员 */ int main ()
{ struct Student
{
char cName[];
int iNumber;
char cSex;
int iGrade;
}student={"Girl",,'w',}; struct Student *pStruct;
pStruct = &student; //指向student结构体变量
printf("-----------the sudent's information----------\n");
printf("Name:%s\n",(*pStruct).cName);
printf("Number:%d\n",(*pStruct).iNumber);
printf("Sex:%c\n",(*pStruct).cSex);
printf("Grade:%d\n",(*pStruct).iGrade);
printf("============使用->符号引用结构体成员==============\n");
printf("Name:%s\n",pStruct->cName);
printf("Number:%d\n",pStruct->iNumber);
printf("Sex:%c\n",pStruct->cSex);
printf("iGrade:%d\n",pStruct->iGrade); return ;
}

1.student.iNumber

2.(*pStruct).iNumber

3.pStruct->iNumber

后两种是通过结构体变量指针来引用的结构体变量中的成员,第2种在*pStruct上加上小括号的原因是因为要提升 ”*pStruct“ 的运算优先级,因为在默认情况 . 运算符的优先级是比*运算符的优先级要高的。

个人比较喜欢用"->指向运算符"来引用结构体中的成员

注意:声明结构体的位置可以放在main函数外,也可以放在main函数里

一些习题例子:

 # include <stdlib.h>
# include <string.h> struct Student
{
char name[];
int iNumber;
char cSex;
int iGrade;
}student; int main ()
{
struct Student *pStruct;
pStruct = &student;
strcpy(pStruct->name,"瑶瑶");
pStruct->iNumber = ;
pStruct->cSex='W';
pStruct->iGrade=; printf("------------The student's information---------\n");
printf("Name:%s\n",(*pStruct).name);
printf("Number:%d\n",(*pStruct).iNumber);
printf("Sex:%c\n",(*pStruct).cSex);
printf("Grade:%d\n",(*pStruct).iGrade); return ;
}
 # include <stdio.h>
# include <stdlib.h> //创建一个学生结构体
struct Student
{
char Name[];
char sex;
int score;
char lovep[];
}student; int main () {
struct Student *pStruct;
pStruct = &student;
printf("Input:====================\n");
printf("Name:");
scanf("%s",&pStruct->Name);
getchar(); //在使用%s读入字符串的时候 需要一个getchar来接受空格符号 这样才能不影响下次的输入
printf("sex:");
scanf("%c",&pStruct->sex);
printf("score:");
scanf("%d",&pStruct->score);
printf("love People:");
scanf("%s",&pStruct->lovep);
printf("Print:====================\n");
printf("name:%s\nsex:%c\nscore:%d\nLovePeople:%s\n",pStruct->Name,pStruct->sex,pStruct->score,pStruct->lovep); return ;
}

因为比较简单,所以都没有写上注释,练习的时候有1个点,

1.熟练掌握用指针来操作结构体变量的两种方式

C语言 指向结构体变量的指针的更多相关文章

  1. C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员

    设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员 ...

  2. C语言 指向结构体数组的指针

    当结构体指针变量指向一个结构体变量数组的时候,此时指针变量的值就是结构体数组的首地址 关于如何定义结构体数组,和将结构体指针指向结构体变量数组,不是重点. 重点是,明白结构体指针的是怎么移动的, 我个 ...

  3. c语言指向结构体数组的指针

    #include <stdio.h> #include <stdlib.h> struct dangdang { ]; ]; ]; int num; int bugnum; ] ...

  4. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  5. C语言中结构体变量之间赋值

    近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...

  6. c语言指向结构体的指针作为函数参数

    注意 这里包括形参和实参 struct dangdangtest { ]; int num; }; void change(int num)//值传递 新建一个变量接受传递的值 { num = ; } ...

  7. C语言_结构体变量指针做函数参数的使用案例

    # include <stdio.h> # include <stdlib.h> # include <string.h> # include <malloc ...

  8. c语言中结构体指针

    1.指向结构体的指针变量: C 语言中->是一个总体,它是用于指向结构体,如果我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体.那么我们要用指针取出结构体中的数据.就要用到指向运 ...

  9. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

随机推荐

  1. 并查集【p2700】逐个击破

    题目描述-->p2700 逐个击破 题意概括 花费最小的代价,使得一些有标记的节点不连通. 分析 我们需要花费最小代价使得原来连通的图中一些节点之间不相互连通. 贪心显然是可行的(一点也不显然 ...

  2. Spring MVC的工作机制

    1. Spring MVC请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作. 2. DispatcherServlet查询一个或多个H ...

  3. Codeforces 920 G List Of Integers

    题目描述 Let's denote as L(x,p)L(x,p) an infinite sequence of integers yy such that gcd(p,y)=1gcd(p,y)=1 ...

  4. 【字符串哈希】bzoj3916 [Baltic2014]friends

    枚举断点,哈希判断. #include<cstdio> using namespace std; typedef unsigned long long ull; ull hs,hs1,hs ...

  5. 组合式MapReduce计算作业

    1)迭代MapReduce计算任务,就是在一个循环内多次执行一个MapReduce. 2)顺序组合式MapReduce作业的执行 MapReduce1—>MapReduce2—>MapRe ...

  6. IO 流(InputStream,OutputStream)

    1. InputStream,OutputStream都是抽象类,所以不能创建对象. 1个中文占两个字节 package com.ic.demo01; import java.io.File; imp ...

  7. PhantomJS 基础及示例

    腾讯云技术社区-掘金主页持续为大家呈现云计算技术文章,欢迎大家关注! 作者:link 概述 PhantomJS is a headless WebKit scriptable with a JavaS ...

  8. Chrome DevTools 代码覆盖率功能详解

    共 1812 字,读完需 3 分钟.工欲善其事必先利其器,前端周刊本周起每周会加餐 1 篇工具技巧,里面辅以动图,让大家看完就能学会,并上手使用.本文会介绍 Chrome Canary 新增的代码覆盖 ...

  9. 取代Promise的Generator生成器函数

    接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...

  10. javascript快速入门14--DOM基础

    DOM(Document Object Model)——文档对象模型 什么是DOM? Document Object Model (DOM)是HTML和XML文档的编程接口.它提供了上述文档的一种结构 ...