C零基础视频-40-结构体指针

目录

  • 结构体指针的定义
  • 使用结构体指针引用结构体成员
  • 结构体指针作为函数参数传递

结构体指针的定义

结构体指针的定义与基本数据结构的指针类似,使用"*"符号即可:

#include <stdio.h>

struct tagPetDog{
    char szName[20];
    char szColor[20];
    char nWeight;
};

int main(int argc, char* argv[])
{
    tagPetDog dog = { "旺财", "黄色", 5 };
    tagPetDog* pDog = &dog;
    return 0;
}

使用结构体指针引用结构体成员

结构体指针也支持取内容,加减常数等操作,同基本数据结构的指针类似,在此不再赘述。
结构体指针通过"->"运算符,可以引用结构体成员:

#include <stdio.h>

struct tagPetDog{
    char szName[20];
    char szColor[20];
    char nWeight;
};

int main(int argc, char* argv[])
{
    tagPetDog dog = { "旺财", "黄色", 5 };
    tagPetDog* pDog = &dog;
    printf("%s 颜色:%s, 体重:%d公斤\r\n",
        pDog->szName,
        pDog->szColor,
        pDog->nWeight);
    return 0;
}

结构体指针作为函数参数传递

如果某个函数需要使用结构体,那么一般推荐使用结构体指针作为参数,它有两个好处:

  • 只传递一个指针地址,而不是复制整个结构体,节省传参时的栈空间
  • 函数内部对结构体的修改,可以作用到函数外部
#include <stdio.h>

struct tagPetDog{
    char szName[20];
    char szColor[20];
    char nWeight;
};

void FunAddWeight(tagPetDog* pDog, int nAddWeight)
{
    pDog->nWeight += nAddWeight;
}

int main(int argc, char* argv[])
{
    tagPetDog dog = { "旺财", "黄色", 5 };
    tagPetDog* pDog = &dog;
    printf("%s 颜色:%s, 体重:%d公斤\r\n",
        pDog->szName,
        pDog->szColor,
        pDog->nWeight);
    FunAddWeight(pDog, 10);
    printf("%s 颜色:%s, 体重:%d公斤\r\n",
        pDog->szName,
        pDog->szColor,
        pDog->nWeight);
    return 0;
}

原文地址:https://www.cnblogs.com/shellmad/p/11695653.html

时间: 2024-08-30 07:08:27

C零基础视频-40-结构体指针的相关文章

零基础入门之结构体字节对齐

一.字节对齐的规则: 1.一般设置的对齐方式为1,2,4字节对齐方式.结构的首地址必须是结构内最宽类型的整数倍地址:另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gcc编译器下最高为4字节对齐),否则在前一类型后补0:这里特别提到的是数组一定要注意,而且在一些编程的技巧中,我们可以使用数组强制字节达到对齐的目的.这在网络编程中是很常见的. 举例:比如CHAR型占用空间为1字节,则其起始位置必须可被1整除.INT为4字节,其起

C零基础视频-39-结构体的定义与使用

目录 为什么要使用结构体 结构体的定义与使用 结构体的定义 定义结构体变量 引用结构体中的成员 为什么要使用结构体 生活中的事物,往往有多种属性,我们为了记录和表示他们,需要围绕一个事物,记录多中数据. 如一只宠物狗,他可能有:姓名.颜色.体重. 我们可以使用三个不同的变量记录它: #include <stdio.h> int main(int argc, char* argv[]) { char szName[20] = { "旺财" }; char szColor[20

C零基础视频-42-共用体

目录 共用体的定义与使用 共用体与结构体的比较 共用体的定义与使用 共用体的关键字是union,共用体是非基本数据类型,同结构体类似,我们需要先声明共用体类型,再利用自定义的类型去定义变量. #include <stdio.h> #include <string.h> union MyUnion { double dbWeight; int nID; char szName[8]; }; int main(int argc, char* argv[]) { MyUnion unio

黑马程序员---C基础12【结构体数组】【结构体指针】【结构体嵌套】【作为函数参数】【枚举类型】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [结构体数组] 1.结构体数组: 结构体数组的每一个元素都是具有相同结构类型的下标结构变量:(可以表示一个群体,一个班学生档案) 2.结构数组定义: 定义格式: struct    结构名{ 成员列表: }数组名[数组长度]: 1 1)定义结构体的同时定义数组: 2 3 struct stu{ 4 5 int num; 6 7 char name[10]; 8 9 int age; 10 11

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

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

1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针,并且 在这个结构体中,第一个结构成员必须也是一个结构体(最好是结构体类型). 那么我们可以这个结构体指针转换为指向这个结构体中第一个成员结构体的指针. 直接看代码: ************************************ /* struct transform for struct

用结构体指针存储数据__正序_逆序下的输入

逆序输入 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #define maxn 1000 5 6 //邻接表(点很多,边较少) 7 //共有n个点,点编号为1~n,m条边 8 //无向图 9 10 struct node 11 { 12 long value; 13 struct node *next; 14 }*d[maxn+1]; 15 16 int main() 17 { 1

2015.9.10关于链表中结构体指针的错误

昨天用结构体指针写了一个双链表的程序,编译环境是VC6.0,之前写单链表的时候也是用的这个编译器,但是昨天出了一个让我很费解的问题,代码如下: /********************************************************** * C语言实现双链表 *文件名:list.c *作者:Mr Wan *编写时间:2015.9.9 *功能:实现双链表的简单操作 *版本:1.0 * ********************************************

使用offsetof对结构体指针偏移操作

题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a subset of C w hich doesn't have the '.' or '->'operators, as the higher-ups heard shortcuts like this w ere useful in an activity called "code gol