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

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

 

定义结构体变量的指针:

//假设已有一个结构体名为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. 【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones

    打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> ...

  2. STL之search

    描述 使用STL中的search函数,判断一个序列是否是另一个序列的子序列. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector<int> ...

  3. Linux下#!/usr/bin/env bash和#!/usr/bin/bash、#!/bin/bash的比较

    #!/usr/bin/env bash #在不同的系统上提供了一些灵活性. #!/usr/bin/bash #将对给定的可执行文件系统进行显式控制. 通过/usr/bin/env运行程序,用户不需要去 ...

  4. 让旧的的Mac也能免费安装keynote

    苹果在美国时间9月10日上午10时,将免费iworks.  听到此消息,我心情激动. 立马升级了操作系统 . 然后搜索keynote ,发现还是收费的.  非常郁闷.. 上网上了解,有如下说明: 20 ...

  5. 继续推荐几款VisualStudio的插件(二)

    今天晚上闲着的时候逛了一下,发现了几款不错的VisualStudio插件,这里推荐一下: Exception Breaker 在调试的时候,为了及时发现错误,我们常常会打开"总是引发所有CL ...

  6. 【js 正则表达式】记录所有在js中使用正则表达式的情况

    说实话,对正则表达式有些许的畏惧感,之前的每次只要碰到需要正则表达式去匹配的情况,都会刻意的躲过或者直接从度娘处获取. 此时此刻,感觉到了某一个特定的点去触及她.但笔者对于正则表达式使用上的理解是这样 ...

  7. shell脚本编写注意事项

    shell中赋值变量时不能有空格 之前写python写习惯了 test = ‘free -m’ 在shell中不能有空格 test='free -m' 而且使用管道符之前要留空格 test='free ...

  8. java源码阅读ArrayBlockingQueue

    1类签名与简介 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQ ...

  9. 警惕rapidxml的陷阱(二):在Android上默认内存池分配数组过大,容易导致栈溢出

    上一篇随笔中提到了,rapidxml在每个xml对象中维护了一个内存池,自己管理变量的生存周期.看起来很好,但我们在实际使用中还是出现了问题. 项目中我们的模块很快写好了,在windows和linux ...

  10. IIS支持伪静态(windows 2003)

    IIS配置支持伪静态 ISAPI Rewrite 第一:首先我们需要下载一个ISAPI_Rewrite,有精简版和完全版,一般精简版只能对服务器全局进行配置,而完整版可以对服务器上的各个网站进行伪静态 ...