数据结构与算法: 指针和结构体

本文详细介绍了C语言中的指针概念,包括指针的算术运算、指针数组、指针指向指针以及在函数中的使用。同时,阐述了结构体作为复合数据类型在组合变量和实现其他数据结构(如链表、树等)中的作用。此外,还探讨了数组的特性,如动态内存分配、随机访问以及优缺点。通过对数组和指针的深入理解,开发者可以更高效地操作数据和构建复杂的数据结构。
摘要由CSDN通过智能技术生成

指针

指针用于指向存储在计算机内存中任何位置的值的地址。获取存储在该位置的值称为取消引用指针。指针提高了重复过程的性能.

遍历字符串
查阅表格
控制表
树结构

指针的运用

  • 指针算术:有四种算术运算符可用于指针:++、–, +、-
  • 指针数组:您可以定义数组来保存多个指针。
  • 指针指向指针:C 允许您在指针上放置指针,依此类推。
  • 将指针传递到 C 中的函数:通过引用或地址传递参数使被调用函数能够在调用函数中更改传递的参数。
  • 从 C 中的函数返回指针:C 还允许函数返回指向局部变量、静态变量和动态分配内存的指针。
Sr.No.Concept & Description
1Pointer arithmetic ,There are four arithmetic operators that can be used in pointers: ++, --, +, -
2Array of pointers, You can define arrays to hold a number of pointers.
3Pointer to pointer, C allows you to have pointer on a pointer and so on.
4Passing pointers to functions in C ,Passing an argument by reference or by address enable the passed argument to be changed in the calling function by the called function.
5Return pointer from functions in C, C allows a function to return a pointer to the local variable, static variable, and dynamically allocated memory as well.

在这里插入图片描述

结构体

结构体是一种复合数据类型,它定义了要放置在内存块中一个名称下的变量的分组列表。它允许通过使用指向结构的单个指针来访问不同的变量。

它可以保存不同数据类型的变量。
我们可以创建包含不同类型属性的对象。
它允许我们跨程序重用数据布局。
它用于实现其他数据结构,如链表,堆栈,队列,树,图形等。

数据结构中的数组

在本文中,我们将讨论数据结构中的数组。数组被定义为存储在连续内存位置的类似类型的数据项的集合。它是最简单的数据结构之一,其中每个数据元素都可以使用其索引号随机访问。数组可以将每个主体中的标记存储在连续的内存位置。

数组的属性

数组的一些属性如下所示 -

  1. 数组中的每个元素都具有相同的数据类型,并且具有与 4 个字节相同的大小。
  2. 数组中的元素存储在连续的内存位置,第一个元素存储在最小的内存位置。
  3. 数组的元素可以随机访问,因为我们可以计算数组中每个元素的地址,并具有给定的基址和数据元素的大小。

数组的内存分配

0(从零开始的索引):数组的第一个元素将是 arr[0]。
1(基于一个的索引):数组的第一个元素将是arr[1]。
n(基于 n - 的索引):数组的第一个元素可以驻留在任何随机索引号上。

用下面给出的信息来访问数组中的任何随机元素

  1. 阵列的基址。
  2. 元素的大小(以字节为单位)。
  3. 索引类型,数组紧随其后。

计算访问数组元素的地址的公式

元素 A[i] 的字节地址 = 基址 + 大小 * ( i - 第一个索引)

数组的优点

  1. Array 为相同类型的变量组提供单个名称。因此,很容易记住数组的所有元素的名称。
  2. 遍历数组是一个非常简单的过程。我们只需要递增(+偏移量)数组的基址,以便逐个访问每个元素。
  3. 数组中的任何元素都可以使用索引直接访问。

数组的缺点

  1. 阵列是同构的。这意味着具有相似数据类型的元素可以存储在其中。
  2. 在数组中,存在静态内存分配,即数组的大小无法更改。
  3. 如果我们存储的元素数少于声明的大小,则会浪费内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael_chemic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值