首页 > 编程语言 >【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结构、函数中的参数传递和C语言中运算符的含义

【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结构、函数中的参数传递和C语言中运算符的含义

时间:2024-08-19 23:24:01浏览次数:10  
标签:链表 函数 int 程序结构 C语言 运算符 参数 指针 变量

目录

【数据结构与算法第一章】编程基础

1.1 变量与数据类型

1.2 指针

1.3 结构体

1.4 数组和链表

1.5 程序结构

1.6 函数中参数的传递

1.7 C语言中运算符的含义


【数据结构与算法第一章】编程基础

1.1 变量与数据类型

  • 变量:

        ① 在C语言中,所有变量必须先声明后使用

        ② C语言变量名智能由数字、字母和下划线组成,且变量名不能以数字开头不能是C语言的关键字

  • 数据类型:

        ① int型(整数类型),float型(浮点数类型),char型(字符串类型);

        ② 在C语言中,可以使用sizeof操作符获取变量所占空间大小,并返回变量所占的字节数

1.2 指针

  • 指针变量简称指针。指针变量与int,float等变量不同,它存放的是变量对应的地址。
  • 在声明指针时,*充当标识符,标识声明的变量是一个指针变量。
  • 在用指针访问变量时,*表示获取指针指向地址的值
  • &是取址符,&y表示取得变量y的地址。

1.3 结构体

        结构体通常用来表示类型不同但是又相关的若干数据。

  • 结构体的定义和创建:

        Notice:结构体定义必须以分号结尾,否则编译无法通过

// struct 结构体名{成员列表}; 
// 示例如下:
struct stuInfo
{
    int stuId,rank;
    float score;
}zhangsan;

        在考试中,typedef常用于给结构体类型取别名。这种方式在定义新的结构体变量时,可以省略struct关键字;

        Notice:在定义结构体类型时,当结构体成员有指向该结构体本身的指针时,typedef struct后面的结构体名称不可省略

// 给结构体命名
typedef struct stuInfo    //此处的stuInfo可以省略
{
    int stuId,rank;
    float score;
}stuInfo;

// 创建一个stuInfo类型变量,变量名为zhangsan
stuInfo zhangsan;
  • 结构体内部变量的访问:

        ① 结构体变量访问其成员变量时,使用.运算符;

        ② 结构体指针访问其成员变量时,使用->运算符。

// 结构体变量
zhangsan.score

// 结构体指针
zhangsan->score

1.4 数组和链表

        数组和链表都是有序排列的同类数据元素的集合。

  • 数组的创建:

        ① 基本数据类型:int arr[10];

        ② 用结构体类型创建:stuInfo students[50];

        ③ 用malloc函数或者new关键字向内存的动态存储区中申请一块连续的地址空间来创建数组。

        创建一个能存放100个int型数据的数组arr的代码如下:

// 定义一个int型指针arr
int *arr;

// 用malloc函数申请大小为100个int数据的连续空间,并把首地址赋给arr
arr = (int *)malloc(sizeof(int)*100);

// C++中可以直接用new来申请
int *arr = new int[100];
  • 链表是一种数据元素逻辑地址相邻但物理位置不一定相邻的存储结构。
typedef struct LinkNode
{
    int data;
    struct LinkNode *next;
}LinkNode;

LinkNode A,B,C;
A.next = &B;    // 将A的下一个元素设为B
B.next = &C;    // 将B的下一个元素设为C

1.5 程序结构

  • 分支结构(if语句,switch语句):

        ① if语句后面接着判断条件用小括号包裹。如果条件为真,则执行大括号中的语句,否则跳到else部分;

        ② 如果有多行代码,则必须用大括号将分支对应的代码块括起来。

  • 循环结构(while,do...while和for语句)

1.6 函数中参数的传递

  • 函数定义:

        C语言程序的执行总是从main函数开始,最后也是由main函数来结束整个程序。

        函数语法格式的要点如下:

        ① 返回值类型:函数执行结束之后的返回值类型可以是void(返回值为空)、int、float等一些基本数据类型,也可以是指针或自定义的结构体;

        ② 函数名:由用户确定;

        ③ 参数列表:形式为“参数类型 参数名”,传入的每一个参数都要声明参数类型,需要与变量的定义相区别,即若要传入两个int型变量,括号内写法应该为int a, int b而非int a,b

        ④ 函数主体:函数主体包含一组定义函数执行任务的语句;

        ⑤ 返回值:C语言中使用return来返回函数需要传回的数据,且return后面的数据类型要与函数定义的返回值类型一致。若函数的返回值类型为void,则无需返回具体值,但可以通过return语句来提前结束函数的执行。

  • 函数调用:

        ① 直接调用;

        ② 嵌套调用:在一个函数中调用另一个函数;

        Notice:不能在函数中定义函数,即不能“嵌套定义函数”

        ③ 递归调用:一个函数调用自身函数的行为(递归一般会有边界条件,即递归结束的条件,也叫递归基)

        Notice:递归问题一般分为三要素:明确递归函数,寻找递归公式,确定递归边界。

  • C语言中函数的形参与实参:

        C语言中函数的参数出现的位置有两个,在函数定义处的参数叫形参,在函数调用处的参数叫实参。

        ① 形式参数(形参):在函数定义中出现,只有在该函数被调用时,才会为形参分配存储空间,接收传入函数的数据,形参才会得到具体的值;

        ② 实际参数(实参):在函数调用中出现,包含具体的数据,在发生函数调用时,实参内的值会传递给形参,从而被函数内部的代码使用。

        Notice:数据从实参向形参传递的过程叫做单向值传递。在函数内部对于形参的操作并不会影响实参的值;当数组名作为参数传入时,函数可以直接对该原数组中的元素进行操作,因为数组名对应的是数组的首地址,故参数传递中传递的是地址。形参数组取得该首地址后,形参数组和实参数组便为同一个数组,共享一段内存空间。

  • 参数传递:

        ① 传值,错误例子如下:

// 交换参数数值的错误示例
void swap(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

        这个函数并不能交换a,b的值,因为数据从实参到形参的传递为单向值传递

        ② 传指针(传地址):在参数的传递过程中传递的不是欲交换的数值而是参数地址;

// 交换参数数值的正确示例
void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main(){
    int c = 1, d = 2;
    swap(&c, &d);
    return 0;
}

        ③ 传引用:C++还提供了传引用的参数传递方式,传引用能够达到和传指针同样的效果。所谓引用,就是给已存在变量取一个别名,通过这个别名和原来的名称都能够找到这份数据。定义引用类型的格式类似于指针格式,只是用&取代了*,例如:数据类型 &引用变量名 = 引用实体。

        Notice:传引用在形参定义时需要添加&,但在函数内使用形参时,直接将其作为一个普通数据类型的变量进行相关操作即可。

void swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

int main(){
    int c = 1, d = 2;
    swap(c, d);
    return 0;
}

1.7 C语言中运算符的含义

        假设A=10,B=3,相关运算如下表所示:

标签:链表,函数,int,程序结构,C语言,运算符,参数,指针,变量
From: https://blog.csdn.net/henry_fine/article/details/141335861

相关文章

  • C++运算符重载
    文章目录一、运算符重载1、规定2、operator关键词的使用二、赋值运算符的重载1、功能2、使用一、运算符重载1、规定C++允许我们对类类型使用运算符,但要我们自己通过运算符重载完成类类型的运算,如果没有对应的运算符重载就会报错。运算符重载需要使用特殊关键词......
  • Oracle运算符:从等号到空值运算的使用技巧
    在Oracle数据库中,关系运算符和逻辑运算符用于在SQL查询中定义条件。1.等号(=)运算符作用:用于精确匹配字段的值。适用场景:适用于比较数值、字符串、日期等数据类型,要求条件严格相等。例子:SELECTename,salFROMempWHEREdeptno=10;查询部门编号为10的所有员工姓名和......
  • 2.设计链表
    .-力扣(LeetCode)题意:在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val的节点追加到链表的最......
  • C语言程序设计-[24] 程序结构与函数定义
    1、C程序基本结构。2、函数的分类。3、函数的定义。无参函数的代码示例如下:注:调用的函数都是无返回值的,所以使用了void。有参函数的代码示例如下:注1:调用的函数是有参数的,main()函数的a,b,c值分别传给了average()函数的x,y,z;注2:调用的函数是有返回值的,且返......
  • 单链表C语言版
        一、单链表的定义单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 程序如下:#include<stdio.h>#include<stdlib.h>//定义链表节点结构体typedefstructNode{intdata;//数据域structNode*nex......
  • 基本运算符
    基本运算符packageoperator;/***@version:javaversion1.8*@Author:MrTheroux*@description:*@date:2024-08-1917:06*/publicclassDemo01{publicstaticvoidmain(String[]args){inta=10;intb=20;intc=......
  • [Python学习日记-9] Python中的运算符
    简介        计算机可以进行的运算有很多种,但可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,而本篇我们暂只介绍算数运算、比较运算、逻辑运算、赋值运算算数运算一、运算符描述        以下......
  • C语言--循环链表
    循环链表实现循环链表的最后一个节点指向头节点,形成一个环。#include<stdio.h>#include<stdlib.h>typedefstructNode{  intdata;  structNode*next;//指向下一个节点}Node;typedefstruct{  Node*head;//头指针}CircularLinkedList;......
  • 【C总集篇】第四章 运算符,表达式和语句
    文章目录第四章运算符,表达式和语句运算符赋值运算符:=加法运算符:+减法运算符:-符号运算符:-和+乘法运算符:*除法运算符:/size_t类型求模运算符:%递增运算符:++递减运算符:--移位运算符左移操作符:<<右移操作符:>>位操作符按位与:&基础概念**清零**清除高位/低位保留指定......
  • 【c】运算符优先级速记
    图示速记归类初等运算符>单目运算符>算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符详细分类初等运算符有:()、[]、->、.(后两者均为结构体成员运算符);单目运算符有:!、~、++、--、sizeof、&、*;算术运算符有:*、/、+、-、<<、>>;关系运算符有:<、<=、>、>=、==、!=......