C语言中的结构体指针

C语言中的结构体指针C 语言中的结构体指针结构体指针概念结构体变量成员访问结构体指针作为函数参数结构体数组指针结构体的自引用与不完全声明结构体指针的概念概念 结构体变量的地址 指向某个结构体变量 同时也是结构体变量中第一个元素的地址 我们可以通过结构体变量可以指向结构体中包含的一些成员定义 struct 结构体名 结构体指针变量名 如 structaddres addr 结构体

C语言中的结构体指针

  1. 结构体指针概念
  2. 结构体变量成员访问
  3. 结构体指针作为函数参数
  4. 结构体数组指针
    5.结构体指针数组

  5. 结构体的自引用与不完全声明

定义一个结构体变量:

 struct 结构体名 *结构体指针变量名; 如:struct address *addr; 

结构体指针变量初始化:

结构体指针变量名 = &结构体变量; 或者:结构体指针变量名 = &(结构体变量.第一个成员) 
结构体指针 ->成员名;如addr->country; (*结构体指针).成员名;(*addr).country;//很少去进行使用,注意必须去使用(),,因为.优先级大于* 结构体变量.成员名 stu.name 

注意:如果是结构体指针的话,它是可以指向自己的(引用自己)

结构体指针作为函数参数传递,那么会有很大优化:(实参传向形参的只是一个地址)

out_student(struct student *stup); //将结构体变量的地址传入进去 
struct student stus[] = {stu,stu2}; struct student *stup2 = stus; 
 struct student *stups [] = {stup1,&stu2}; out_students(stups,2); 
struct B; struct A{ struct *B b; }; struct B{ struct *A a; }; 

代码如下:

 struct address{ char *country; char *city; char *street; }; struct student{ int xh; char *name; int age; int gender; struct address *addr; }; 
#include 
  
    #include"student2.h" #include 
   
     void out_student(struct student *stu); void out_students(struct student *stups[],int n); int main(void) { struct address addr1 = {"china","shanghai","beijing road"}; struct student stu = {1,"zhangsan",10,1,&addr1}; struct student *stup1 = &stu; struct address addr2={"jap","dongjing","hefei road"}; struct student stu2 = {2,"lisi",11,2,&addr2}; printf("student name:%s\n",stup1->name); printf("student street:%s\n",stup1->addr->street); printf("==================="); out_student(stup1); out_student(&stu2); /*定义一个结构体的数据*/ struct student stus[] = {stu,stu2}; struct student *stup2 = stus; int i ; for(i = 0 ;i < 2 ; i++) { out_student(stup2+i); printf("---------------------------------"); } /*定义一个结构体指针数组*/ struct student *stups [] = {stup1,&stu2}; out_students(stups,2); return 0; } void out_student(struct student *stu) { printf("student xh:%d\n",stu->xh); printf("student name:%s\n",stu->name); printf("student gender:%d\n",stu->gender); printf("student age:%d",stu->age); printf("stduent country:%s\n",stu->addr->country); printf("student city:%s\n",stu->addr->city); printf("student street:%s\n",stu->addr->street); printf("*"); printf("size of:%d\n",sizeof(stu)); } void out_students(struct student *stup[] ,int n) { //代码省略 } 
    
  

欢迎大家的访问,代码可以进行run,因为最近比较忙,所以可能质量有点小下降,后面会修正。谢谢大家的访问

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229136.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:23
下一篇 2026年3月16日 下午5:24


相关推荐

  • Java值传递与引用传递的区别

    Java值传递与引用传递的区别Java 值传递与引用传递文章目录 Java 值传递与引用传递前景实参与形参值传递与引用传递 Java 中的值传递总结前景关于这个问题 引发过很多广泛的讨论 看来很多程序员对于这个问题的理解都不尽相同 甚至很多人理解的是错误的 还有的人可能知道 Java 中的参数传递是值传递 但是说不出来为什么 在开始深入讲解之前 有必要纠正一下大家以前的那些错误看法了 如果你有以下想法 那么你有必要好好阅读本文 错误理解一 值传递和引用传递 区分的条件是传递的内容 如果是个值 就是值传递 如果是个引用 就是引用传递 错误

    2025年9月28日
    6
  • 360浏览器怎么设置截图快捷键_谷歌浏览器截图快捷键ctrl加什么

    360浏览器怎么设置截图快捷键_谷歌浏览器截图快捷键ctrl加什么360截图支持网页截图,前提是你要打开360浏览器,打开后,不管是什么界面都可以截图。一旦关闭,便不能使用。但是默认的360快捷键(ctrl+shift+X)可能与系统其他功能快捷键冲突,所以本文主

    2022年8月5日
    11
  • Nutch使用总结

    Nutch使用总结Nutch 使用总结 Nutch 是一个开源 Java 实现的搜索引擎 它提供了我们运行自己的搜索引擎所需的全部工具 包括全文搜索和 Web 爬虫 Nutch 使用方法简介 http blog csdn net pengpengfly archive 2008 09 29 aspxnutch1 2eclipsetomc 0 配置 http hi b

    2026年3月19日
    2
  • 【math】 向量运算:叉乘

    【math】 向量运算:叉乘文章目录 1 定义 2 几何意义 3 拓展应用 1 定义 c a b 向量的叉乘 即求同时垂直两个向量的向量 即 c 垂直于 a 且 c 垂直于 b 假设向量 a a x a y a z b b x b y b z c c x c y c z 则 c a b a x a y a z b x b y b z a y b z a z b y a z b x a x b z a x b y a y b x 为方便记忆 可参照下图 2 几何意义 c

    2026年3月19日
    2
  • Hadoop博文目录

    Hadoop博文目录

    2021年8月26日
    55
  • “0x69ba3a96〞指令引用的〝0x00000000〞内存。该内存不能为〝written〞[通俗易懂]

    —转自sql1981(http://zhidao.baidu.com/question/385499006.html&__bd_tkn__=729142612d22862b5053a77a93ad20fd864f93af8078338d51fed8133ea5c69d362ad36bb4bcda3b39bb3949f6bbe47087ac3af56e60b1f4e7eb60157b54f836

    2022年4月9日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号