在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. c#动态编译并执行字符串

    比较简单,步骤是这样的 string -> compiler -> assembly -> reflection -> execution 直接上代码: using Syste ...

  2. MySQL大表优化方案

    转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...

  3. python3 第二十一章 - 函数式编程之return函数和闭包

    我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但 ...

  4. python_6_字符串

    什么是字符串? --一般用户输入数据和一堆有意义或者没有意义的文字符号组合 对字符串有哪些操作? --字符串本身不能修改,可以切片,可以读取 -- .capitalize()              ...

  5. CSS3 动画及过渡详解

    今天开始我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).过渡(transition)和动画(animation)等CSS3技术. 首先我们先来了解一下变形(transfor ...

  6. java编程中常用英语单词

    JAVA 省略语与名词解释 -------------------------------- J2EETM----JavaTM 2PlatformEnterpriseEdition : J2EE(JA ...

  7. freemarker常用值格式化方法

    freemarker常用的值格式化方法: 1.${price?string('0.00')} 对price进行格式化,小数点后不足2位用0补足. 比如:price=1 输出:1.00 2.${pric ...

  8. Linux 修改环境变量报错

    报错如下: -bash: export: `=': not a valid identifier -bash: export: `/usr/local/sbin:/usr/local/bin:/sbi ...

  9. z-index在IE中的坑

    在CSS2.1规范中,每个盒模型的位置是三维的,分别是平面画布上的x轴,y轴以及表示层叠的z轴.对于每个html元素,都可以通过设置z-index属性来设置该元素在视觉渲染模型中的层叠顺序. z-in ...

  10. Hyperledger Fabric Chaincode for Operators——实操智能合约

    什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...