首页 > 其他分享 >数据结构——C语言知识补充

数据结构——C语言知识补充

时间:2023-10-07 19:11:42浏览次数:38  
标签:typedef 变量 知识 指针 C语言 结构 数据结构 struct

学数据结构发现代码看不懂 : (
参考资料:
C语言--指针详解 - tongye - 博客园
C语言结构体详解,C语言struct用法详解

指针

C语言的一大难点,如何理解指针和运用指针。
从一个简单的应用说起:
int a = 1;
这是一个简单的变量声明和初始化,定义了一个整型变量a,并赋值为1。
而对于计算机内部,在栈中定义了一个变量a,在内存中,开辟了一个4个字节大小的空间,a就是这个内存空间的标识符号,1就是存储到这个内存空间的值。
printf("%p",&a);
这条语句输出了a在内存的最小地址号,也就是起始地址号。
再到指针
int *p;
声明了一个int 类型的指针 p,int *为类型,变量名为p,声明一个指针变量并不会分配实际的内存空间。
p=&a;
将变量p存入a的地址,实现指针的初始化
printf("%d",*p); //输出1
指针p实际指向了变量a的内存地址,*p则访问了该内存地址的值,所以输出1。
总结:指针是一种保存变量地址的变量,使用指针可以间接访问数据,声明一个指针变量并不会分配任何地址,指针变量本身的内存空间是固定的,位于栈中,使用指针前必须进行初始化,或者动态分配内存,或指向现有的内存。

结构

结构体允许用户自定义可用的数据类型,可以存储不同的数据类型,并通过成员访问运算符(.)进行访问
结构体定义使用关键字struct和结构体名组成

struct BOOK
{
    int a;
    char b;
    double c;
    char *p;
} ;

BOOK 为结构体名,a b c p都为成员变量,Book为结构变量
struct BOOK book1;
这条语句定义了book1变量
同样的定义变量的方法还有将变量放在结构体的最后,这种方法不需要使用结构体名定义其他变量,因此也可以没有结构体名BOOK,但是后面无法用该结构体定义新的变量。

struct
{
    int a;
    char b;
    double c;
    char *p;
} book1;

结构体赋值

  1. 在结构体后面直接赋值

} book1 = {1,a,1.1,"a"};

  1. 对结构体成员赋值

book1.a = 1;

结构与指针

结构体在内存中的存储与数组类似,都是连续存储。
结构指针是指向结构的指针,使用->操作符来访问结构指针成员。

struct Book *struct_pointer;
struct_pointer = &Book;
struct_pointer->a;	//-> 访问指针结构的成员

image.png
这里有点迷茫问了gpt
image.png
结构指针和普通指针一样,只是将结构的起始地址告诉了结构指针变量它所指向的那日村块是一个特定的结构体对象,在之后的代码中就可以通过指针变量来访问结构体对象的成员而不需要重新赋值。

typedef

C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称
变量与typedef

// 为类型取一个新的名字
typedef unsigned char BYTE;
BYTE b1,b2;

结构与typedef
回顾上面的结构,调用结构体定义新变量时我们需要
struct BOOK book;
使用typedef我们可以为这个结构起一个别名
typedef struct BOOK book;
book book1;
或者是

typedef struct BOOK 
{
    ...
} book;

book book1;

typedef关键字将结构体BOOK定义为了一个新的类型book。
等同于

struct Book {
    ...
};
struct Book book1;

使用结构体别名可以减少代码中出现的冗余,提高代码的可读性和方便对代码的维护和管理。

数组

数组在各种语言都有使用到,具体的使用方法就不再写。

指针与数组

与结构指针类似,定义一个指针变量,并把数组的第一个元素的地址存储在p中,就可以通过*p *(p+1)来访问数组元素,对数组进行操作。

指针与函数

C语言中可以定义指向函数的指针,也称作函数指针,函数指针指向函数的入口地址。
C语言指针进阶(一)——深入详解“函数指针”与“指针函数”-CSDN博客

标签:typedef,变量,知识,指针,C语言,结构,数据结构,struct
From: https://www.cnblogs.com/Focu4/p/17747205.html

相关文章

  • 通过智能客服知识库,提供更优质的客户体验
    在当今快节奏的商业环境中,提供高效和有效的客户服务对于保持客户满意度和忠诚度至关重要。传统的客户服务方法通常涉及长时间的等待、重复的查询和支持代理的有限可用性。然而,随着智能客服知识库的出现,企业现在可以自动化和简化客户支持流程,以提供更快速和个性化的帮助。 一、智能......
  • 【一】基础知识
    【小结】1.汇编指令是机器语言的助记符,同机器指令一一对应。2.每一种CPU都有自己的汇编指令集。3.CPU可以直接使用的信息在存储器中存放4.在存储器中指令和数据没有任何区别,都是二进制信息。5.存储单元从零开始顺序编号。6.一个存储单元可以存储8个bit,即8位二进制数。7.1B......
  • java基础知识总结,javaweb参考资料大全
    Java基础知识总结写代码:1,明确需求。我要做什么?2,分析思路。我要怎么做?1,2,3。3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点:1,该技术是什么?2,该技术有什么特点(使用注意):3,该技术怎么使用。demo4,该技术什么时......
  • c语言 二维数组指针
    @TOC前言前面我们讲了一维数组指针,今天我们讲一下二维数组指针。一、二维数组指针的定义:概述:二维数组指针的定义就是把一维数组换成二维数组。二维数组的各个元素也都是地址。步骤:inta[2][3]={{1,2,3},{4,5,6}};//定义一个二维数组int(*p)[2][3]=&a;//a是整......
  • 实验1 C语言输入输出和简单程序编写
    实验1C语言输入输出和简单程序编写一、实验目的1.会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调试C程序2.知道C程序结构和编码规范,能正确使用3.能正确、熟练使用C语言输入输出函数:scanf(),printf(),getchar(),putchar()4.能灵活......
  • [知识管理] Obsidian + Remotely Save插件 + 第三方存储/OSS(七牛云)的同步方案
    0序言在几经选择、对比之后,我选择:Obsidian+RemotelySave插件+第三方存储/OSS(七牛云)的方案来搭建自己的【知识管理系统】。对比分析知识管理工具的过程,详情参见:[知识管理]个人知识管理之知识管理工具的全面分析-博客园/千千寰宇【推荐】知识管理与数据管理系......
  • Redis知识点
    resis是基于内存的,所有速度很高数据库的发展:网状数据库,层次数据库,关系数据库关系数据库的不足:1.不能有效处理多维数据2.高并发读写性能低3.存储数据容量有限4.数据扩展性和可用性低NoSQL的三大优势:易扩展,大容量,高性能 NoSql与MySQL之间互补Redis是一款基于(key-value)的......
  • 实验1C语言输入输出和简单程序编写
    实验任务1task1.c源代码:1//打印一个字符小人23#include<stdio.h>4intmain()5{6printf("0\n");7printf("<H>\n");8printf("II\n");91011return0;12} 运行截图:task1_1.c源代......
  • C语言阶乘for循环语句的使用
    #include<stdio.h>intmain(){inti=0,n=0;ret=1;scanf_s("%d",&n);//scanf_s作用是避免在编译器中出现不安全影响代码编译 for(i=1;i<=n;i++)   { ret=ret*i;    } printf("%d\n",ret); return0;}用于输入n的阶乘利用for语句解决求1~10阶乘的......
  • C语言求1~n的阶乘的和的进阶优化
    #include<stdio.h>intmain(){ intret=1; intsum=0; intn=0;for(n=1;n<=10;n++)//10可以变成任意值 { ret=ret*n; sum=sum+ret; } printf("%d",sum); return0;}......