首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么使用指向结构的指针而不直接使用结构(C)

使用指向结构的指针而不直接使用结构有以下几个原因:

  1. 内存效率:使用指针可以减少内存的占用。当直接使用结构时,每次传递结构作为参数或者赋值给其他变量时,都需要进行结构的复制,这会消耗大量的内存。而使用指针,只需要传递指针的地址,可以节省内存空间。
  2. 灵活性:使用指针可以更灵活地操作结构。通过指针,可以直接修改结构中的成员,而不需要进行结构的复制。这在某些情况下可以提高程序的执行效率。
  3. 可扩展性:使用指针可以方便地进行结构的扩展。当需要在结构中添加新的成员时,如果直接使用结构,就需要修改所有使用该结构的地方。而使用指针,只需要修改指向结构的指针所指向的结构,不需要修改指针本身。
  4. 代码复用:使用指针可以方便地实现代码的复用。通过将结构定义为指针类型,可以在不同的函数中共享同一个结构实例,避免了重复创建结构的开销。
  5. 函数返回值:使用指针可以方便地将结构作为函数的返回值。如果直接使用结构作为返回值,会导致结构的复制,而使用指针可以避免这个问题。

总结起来,使用指向结构的指针而不直接使用结构可以提高内存效率、灵活性、可扩展性,方便代码复用和函数返回值的处理。在实际开发中,根据具体的需求和场景选择使用指针还是直接使用结构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++指向结构体变量指针

C++通过指向结构体变量指针引用结构体变量中成员 C++中,一个结构体变量指针就是该变量所占据内存段起始地址,指针变量也可以用来指向结构体数组中元素。 ...C++提供了指向结构体变量运算符->,例如: p->num;//表示指针p当前指向结构体变量中成员num p->num 和(*  p).num 等价,同样,p->namep->name等价于(*p...p->n;//得到p指向结构体变量中成员n值。 p->n++;//得到p指向结构体变量中成员n值,用完该值后使它加1。...++p->n;//得到p指向结构体变量中成员n值,并使之加1,然后再使用它。 经典案例:C++指向结构体变量指针。...C++指向结构体变量指针 更多案例可以go公众号:C语言入门到精通

2.7K118

C语言 | 指向结构体变量指针变量

例40:C语言实现通过指向结构体变量指针变量变量输出结构体变量中信息。...解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型变量s_1,又定义了一个指针变量p,它指向一个struct student类型对象,将结构体变量...s_1起始地址赋给指针变量p,也就是使p指向s_1,然后对s_1各个成员赋值。...  struct student *p;//定义结构指针变量    p=&s_1;//将s_1得地址赋给指针变量    s_1.num=10010;//赋值    strcpy(s_1.name,"yan...思考两个问题,怎么对结构体变量成员赋值?怎么通过指向结构体变量指针访问结构体变量中成员? C语言 | 通过指向结构体变量指针变量输出结构体变量中信息 更多案例可以go公众号:C语言入门到精通

1.8K2218

C语言结构体与结构指针使用

C语言结构体与结构指针使用 tips:最近要好好学习一下数据结构,所以必不可少就是c语言结构体和结构指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不同类型数据构成数据集合...说通俗一点就是一个集合。c语言是一门面向过程编程语言,结构使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构指针知识。...,结构体名是一种类型,不能被当成变量名来使用 变量名声明方法: 1)struct 结构体名 结构体变量名; 2)直接在定义结构时候添加变量名声明 //在main()中定义及初始化 struct...二、结构指针使用 1.结构指针定义方法 1)struct 结构体名 *指针; 2)直接在定义结构时候添加结构指针声明 //在main()方法中定义 struct student...c\n", (*p).num, (*p).name, (*p).sex); 1234 看了上面的基础知识是不是觉得比较简单:),下面让我们来分析一下两个特殊结构指针访问方法:) 1)p

2K10

C++指向结构体变量指针构成链表

C++结构体变量和指向结构体变量指针构成链表  链表有一个头指针变量,以head表示,它存放一个地址,该地址指向一个元素。...链表中每一个元素称为结点,每个结点都应包括两个部分:   用户需要用实际数据 下一个结点地址。 经典案例:C++使用结构体变量。...19;//赋值       stu3.num=1003;//赋值    stu3.sex='M';//赋值    stu3.age=20;//赋值       head=&stu1;//将结点stu1起始地址赋给头指针...    stu3.next=NULL;//结点next成员不存放其他结点地址    point=head;//point指针指向stu1结点       do   {     cout<<point-...C++指向结构体变量指针构成链表 更多案例可以go公众号:C语言入门到精通

1.3K88

数据结构为什么要用typedef int datatype ,直接用int

给long这样类型起别名主要目的不是简化程序书写,它有两个用处:一是表明该类型特殊作用,二是将来有可能要改变这种类型(比如提高精度),如果直接声明为long型则失去了程序可惟护性——每一个变量声明都要改动...;声明为INDEX则使维护程序变得十分简单——只要改一下typedef语句即可。...比如 typedef int datetype 然后下面有N个函数 都是类似这样 datetype typeadd(datetype a, datetype b) { return a + b...tmp; tmp = typeadd(typediff(a,b), typediff(a,b)); return typeadd(tmp, tmp); } 如果你没用datetype而是直接...int 当你希望这些函数计算浮点数时候,你就必须把所有代码里所有int都换成float或者double 而且一旦有地方换漏了就很容易出错,丢失精度什么 但是如果你用是datetype,你希望这些函数计算浮点数时候

47040

为什么数据库常使用有序数据结构编程语言使用哈希表结构

作者提到了,Google 对 C++ 哈希表结构优化总体上减少了1% CPU 使用率和4% 内存使用。然而在数据库中,最常见是默认使用像B树一样有序索引。...为什么编程语言和数据库之间“默认”选择不同呢?...传统答案是:数据存储在内存中时使用哈希表读取效率很高; B 树设计理念是充分利用磁盘中块( Block )作用,所以对于编程语言而言,读取效率比较低。...哈希表和树结构比较 在给出答案之前,先来看看哈希表和树结构差别。 计算复杂度 从计算复杂度来说,哈希表对于单个值读取时间恒定为 O(1),结构读取时间为 O(log n) 。...因此,所以在编程语言中,常常会遇到单值查找,使用哈希表读取速度会更快,很难遇到全表扫描。但是随着数据量变大,遇上全表扫描时花 O(n) 来查找值会慢难以接受。

83610

c语言链表指向下一个结构指针,结构体和它众多小细节

指针一样,结构体也是一种数据类型,只不过这种数据类型可以存储多种属性复杂数据,在使用前需要定义类型。...对结构指针而言,访问它所指向结构变量成员可以采用取值运算符*,比如struct (*stu).name。当然,我们在实践中更喜欢采用方式是箭头方式:struct stu->name。...在C语言中,想使用结构体变量必须在前面标注struct,以表示这是一个结构体变量(虽然在.cpp文件支持省略写法),这种写法往往显得代码冗长,所以程序员往往青睐使用起别名关键字typedef。...你可以在结构体最前面使用关键字struct,这样就可以为结构体类型或者对应指针类型起别名,在使用过程中也会少写一个struct,何乐而不为呢!...只是对于初学者而言,可能很难理解为结构指针类型起别名方式。这里只需把它当作一种等价替换就可以,为结构指针起别名之后会把指针标志*给藏起来,但是在实际使用中要时刻注意,这仍旧是一个指针

1.1K21

C语言typedef创建变量指针别名 | 使用结构指针节省内存

二、 关于结构体成员调用 若使用 struct Student student1;或者使用了别名创建结构体后访问成员都要使用‘.’运算符 struct Student student1; student1...需要分配内存或者让指针指向结构体 Studentp student1; // 注意是Studentp,创建结构指针 student1 = (studentp)malloc(sizeof(Student...)); // 指针,要么你主动分配内存,要么你把这个指针指向一个已有的结构体~ student1->age; // 那这里student1就是一个结构体变量指针,要用->访问 相当于你Studentp...创建是一个结构指针,那访问也需要用指针形式访问!...printf("%d", *(A->age)); // 这里也是,如果整体加*,就会输出地址 return 0; } 四、关于为什么结构体成员也有指针类型 原因: 其实是方便内存对齐,造成内存浪费

1K10

C++使用new来初始化指向指针

C++使用new来初始化类指针 1.ClassName * p = new ClassName; 调用默认构造函数。...C++指针初始化问题 c++中指针是一个很经典用法,但是也是最容易出错,比如定义了一个指针,必须对其进行初始化,不然这个指针指向是一个未知内存地址,后续对其操作时候,会报错。...这只是其次,最让人头疼就是指针错误问题,往往编译时候可以通过,在程序运行时候,就会出现异常,如果对程序不是很熟悉,则不是很容易找到问题所在,我最近就遇到过很多这样问题,定义了一个结构指针使用时候忘记初始化...c++指针初始化一般方法 1.将一个已经在内存中存在变量地址传递给定义指针 这个指针指向这个变量内存地址(相同数据类型),完成初始化。...自己遇见问题 我在使用结构指针时候,忘记将结构指针初始化,导致后面访问结构体成员变量时候出现错误(那种编译没错,执行出错问题),后来将指针使用new初始化解决,还有一点就是,全局变量名称与局部变量名称不要一样

26220

C++结构体数组 | 结构体数组使用

C++结构体数组 C++结构体数组与以前介绍过数值型数组不同之处在于:每个数组元素都是一个结构体类 型数据,它们都分别包括各个成员项。...C++结构体数组定义 C++结构体数组定义和定义结构体变量方法相仿,只需声明其为数组即可 struct Student{ //自定义结构体变量      int num;//学号      char...,{1002,'F',18},{1003,'M',19}}; 定义结构体数组stu时,也可以指定元素个数,即写成以下形式:  stu[3]={{1001,'M',21},{1002,'F',18},{...一个结构体常量应包括结 构体中全部成员值。  经典案例:C++结构体数组使用。...C++结构体数组 | 结构体数组使用 更多案例可以go公众号:C语言入门到精通

4.3K88

为什么数据库索引数据结构使用B+树,使用xxx?

文章目录 一、为什么数据库索引不能用二叉搜索树? 二、为什么红黑树不适合数据库索引? 三、为什么不能使用Hash数据结构作为索引数据结构呢?...四、为什么不能使用B-树 五、为什么使用B+树 这个问题其实还是很有趣,我在上一篇文章中,写了: 1、为什么数据库索引不能用二叉排序树; 2、为什么数据库索引不能用红黑树; 本篇文章增加了:...1、为什么不能使用哈希表; 2、为什么不能使用B-树; 3、为什么使用B+树。...总结如下: 如果数据库底层使用二叉搜索树的话,遇到数据为极端情况下会退化成单链表,所以不太合适; 可以想象一下,如果我们给自增一列使用二叉搜索树索引数据结构的话,是不是就很倒霉了。...如果数据量非常大的话,也是非常耗时,所以红黑树也是不太合适。 三、为什么不能使用Hash数据结构作为索引数据结构呢? 当你点进这篇文章时候,肯定对于Hash表是熟悉了。

65430

为什么 SwiftUI 视图使用结构

如果您曾经为 UIKit 或 AppKit(Apple iOS 和 macOS 原始用户界面框架)编程,您会知道它们使用类而非结构体来构造视图。...我之所以说性能因素,是因为很多人认为这是 SwiftUI 使用结构主要原因,实际上这只是更大范围一部分。...在 SwiftUI 中,我们所有的视图都是简单结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数结构体,则结构整个大小就是:一个整数。没有其他。...通过生成不会随时间变化视图,SwiftUI 鼓励我们转向更具功能性设计方法:在将数据转换为 UI 时,我们视图变成简单,惰性东西,不是会失去控制智能化东西。...实际上,您不能找到比使用 Color.red 作为视图更好主意:除了“用红色填充我空间”之外,它不包含任何信息。

2.4K50

为什么SwiftUI视图使用结构体?

如果您曾经为UIKit或AppKit(AppleiOS和macOS原始用户界面框架)编程,您会知道它们使用类而非结构体来构造视图。...我之所以说性能因素,是因为很多人认为这是SwiftUI使用结构主要原因,实际上这只是更大范围一部分。...在SwiftUI中,我们所有的视图都是简单结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数结构体,则结构整个大小就是:一个整数。没有其他。...通过生成不会随时间变化视图,SwiftUI鼓励我们转向更具功能性设计方法:在将数据转换为UI时,我们视图变成简单,惰性东西,不是会失去控制智能化东西。...提示:如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

3.1K10

数据结构----线性表顺序和链式结构使用c

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用一些方法大都是封装好,就java而言,里面使用了大量封装好方法,一些算法也大都写好了...在使用过程记得声明一下方法(函数); 2:链表分析   结构体创建   初始化顺序表   插入操作   删除操作   查找操作   修改操作 需要注意是这里结构体需要一个指针,前一个结点指针指向下一个结点...,依次类推,最后一个指针指向NULL; 2-1:结构体创建 /** * @describe 创建一个结构体 * SLink *next指针; * *SLinkListL 创建一个结构指针 *...,找p时候要找到要修改p,不是前一个结点,比如说,咱们在第二个位置插入时候要找到第一个位置作为p,二修改时候就要找到第二个位置,也就是说pos传值时候不用减一。...,a3,如果要删除a2,则p指向a1,此时,把a1next先交给s(暂存,此时代表a2(因为a1指针指向a2)),然后用s去取下一个指针(next)就是a3, SLinkListL s;/

54630

关于 java 中 set,get方法,而为什么推荐直接使用public

我不知道有没有人遇到过,有一段时间,我都觉得那些 set,get用处何在,我直接写一个public直接拿不就行了,多爽,但是随着使用频繁,越来越想去搜索一下这个问题,不是按照官方推荐,前辈们使用都是建议...举一个简单例子,如果只是简单赋值操作,直接public 和 set get并无两样,但是如果里面有一些逻辑,比如限制数据大小,这样直接Public 就没办法控制了。...其次,安全性方面,private 私有的,public是谁都可以访问。...如果所有的类成员对任何人都是可用,那么客户端程序员就可以对类做任何事情,不受约束。即使你希望客户端程序员不要直接操作你类中某些成员,但是如果没有任何访问控制,将无法阻止此事发生。...综上所述,写到这里,我诞生了一个想法,其实set ,get ,public,对于它们使用完全取决于我们程序员自己,为了让项目之间逻辑更加清晰,有些标准自上而下,慢慢传了下来,无论你使用那种,但是有一个东西是无法避免

1.4K20

使用C语言中头文件有什么技巧和注意事项吗?为什么直接包含C文件呢?

从事嵌入式开发多年,对于C语言使用频率比较多,现在讲讲C语言在平时编程工作中经常出现一些问题,就以楼主题目为切入点分析归纳下,分享给正在使用或者学习C语言小伙伴 ?...C语言头文件有什么用处 在平时项目开发过程中特别是几个项目组在一起工作时候,有的时候代码不是完全开放,这个时候头文件和库作用就体现出来了,在头文件中可以看到这个模块使用结构体,以及静态变量或者定义一些宏...就可以使用printf函数打印东西了,有时候发现不带头文件有些系统函数也能被调用起来,主要C语言比较灵活,这种一般在编译时候会处警告,搞不影响编译通过,C语言编译通常来讲比较随意,所以在运行过程中可能出现崩溃现象...所以后续C++加强了语法检查,一般在初学c++泛型编程都会有一种压抑感觉,这是由于C++语法特性决定,这种编程语言在嵌入式开发过程中使用也是比较多。 ?...使用C语言头文件需要注意事项 头文件里面主要声明一些函数列表,定义一些宏,还会定义一些核心结构体,还会有一些静态全局变量,头文件中尽量不要使用全局变量,因为全局变量在管理上会显得麻烦很多,增加出现问题概率

1.6K30
领券