在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。当然也可以指向结构体,先看一个小案例:

#include <stdio.h>
#include <string.h>
typedef struct PERSON {
int age;
int height;
char name[];
} Person;
int main (){
Person p = {, , "phper"}; //别名
Person *p_s = &p; //定义结构体指针
printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age (*p_s)表示p_s指向的结构体变量
return ;
}

再看一个案例:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct PERSON {
int age;
int height;
char name[];
} Person;
int main (){ Person *p_s = (Person *)malloc(sizeof(Person)); //计算结构体Person大小,并分配相应的内存空间,也可以传参(struct PERSON),再强制转化指针格式
memset(p_s, , sizeof(Person)); //分配好空间内容是随机的,用函数初始化全部清空为0 //指针指向的是p_s的首地址
printf("请输入年龄:");
scanf("%d", &p_s->age);
printf("请输入身高:");
scanf("%d", &p_s->height);
printf("请输入名字:");
scanf("%s", p_s->name);
printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age (*p_s)表示p_s指向的结构体变量
return ;
}

指向数组结构体的指针案例:

# include <stdio.h>
# include <stdlib.h>
# include <string.h> //创建一个结构体
struct Programmer
{
int salary;
int experience;
char type[]; }programmer[]=
{
{, , "PHP"},
{, , "GO"},
{, , "JAVA"},
}; int main ()
{
struct Programmer *pProgrammer;
int index;
pProgrammer = programmer;
for(index=; index<; index++,pProgrammer++) //index++后面还有一句控制着指针的移动,循环完一次,指针将指向下一个地址中的成员
{
printf("编号%d \n",index+);
printf("薪资:%d\n", pProgrammer->salary);
printf("经验-年:%d\n", pProgrammer->experience);
printf("岗位:%s\n", pProgrammer->type);
}
printf("pProgrammer:%d\n&student[2]:%d\n",pProgrammer,&programmer[]);
return ;
}

C语言_了解下结构体指针的更多相关文章

  1. go语言之进阶篇结构体指针类型匿名字段

    1.结构体指针类型匿名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte ...

  2. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  3. C结构体指针的初步使用

    #include <stdio.h> #include <string.h> struct Books { char title[50]; //char author[100] ...

  4. 【C语言入门教程】7.3 结构体指针的定义和引用

    C 语言中指针的操作非常灵活,它也能指向结构体变量对结构体变量进行操作.在学习结构指针之前,需要再次加深对指针的认识.声明指针变量时所使用的数据类型修饰符实际上的作用是定义指针访问内存的范围,如果指针 ...

  5. c语言结构体指针初始化

    今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以前做二叉树算法时,他的左 ...

  6. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  7. C语言结构体指针初始化(转)

    reference: https://www.cnblogs.com/losesea/archive/2012/11/15/2772526.html 今天来讨论一下C中的内存管理. 记得上周在饭桌上和 ...

  8. C语言结构体指针(指向结构体的指针)详解

    C语言结构体指针详解 一.前言 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组. *a).b 等价于 a->b. "."一 ...

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

    1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针, ...

随机推荐

  1. yarn 淘宝源安装与使用用法

    Yarn 淘宝源 yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_sit ...

  2. css scale放大缩小

    .product-content ul li a img:hover{ transform: scale(1.1); }

  3. Linux 性能搜集【top/vmstat/iostat】

    为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[top_monitor.sh]上传到服务器 2.登陆虚拟机,并 ...

  4. relative 和 absolute 定位关系

    问题: relative 和 absolute 之间的关系是什么?有什么区别? 那,答案呢? relative  相对定位, 以自己没有设置relative 属性之前的位置来定位,占用没有设置rela ...

  5. 搭建yum仓库与定制rpm包

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...

  6. Linux系统中常用操作命令

    常用指令 ls        显示文件或目录     -l          列出文件详细信息l(list)     -a         列出当前目录下所有文件及目录,包括隐藏的a(all)mkdi ...

  7. C++——函数的调用

    调用前先声明函数: >>若函数定义在调用点之前,则无需另外声明 >>若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型(原型声明) 类型标识符   被调用函数名( ...

  8. javascipt中的DOM对象

    1.HTML中DOM对象的概念 HTML Document Object Model(文档对象模型) HTML DOM定义了访问和操作HTML文档的标准方法 HTML DOM把HTML文档呈现为带有元 ...

  9. 理解JavaScript中的作用域

     什么是变量,什么是作用域? 变量:简单来说就是在特定时间内保存特定值的一个名字而已,由于不存在定义某个变量必须要保存某种数据类型值的规则,所以变量的值及其数据类型可以在脚本生命周期内任意改变,变量可 ...

  10. js事件机制

    js事件属性: