ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构——类C语言有关操作补充

2021-12-04 12:34:54  阅读:102  来源: 互联网

标签:补充 void float C语言 int 数组 实参 数据结构 指针


目录

元素类型说明

顺序表类型定义

typedef strut {            //定义结构体
   ElemType date[];       //数组,用于存放数据元素
   //ElemType为泛型,表示元素的类型,实际输入时根据需要更改
   //例:当数据元素为A、B、C、D时,ElemType用char替代
   //例:当表示一元多项式系数时,ElemType用float替代
   //例:在一元多项式的顺序表定义时,数据元素包括系数和指数,先定义一个结构类型,详细代码见第二章
   int length;            //当前长度
}SqList;                  //顺序表类型

数组的定义

※C语言中数组静态分配

typedef strut {           
    ElemType date[MaxSize];//数组,存放为首元素的地址,即基地址
    int length;            //整型变量
}SqList;                   //顺序表类型

※C语言中数组动态分配

typedef strut {           
    ElemType *date;         //指针变量,表示数组
    //该方法需要内存动态分配函数
    //Sqlist L;L即为顺序表,由L.data存放数据元素,L.Length存放当前顺序表元素个数
    //L.date=(ElemType*)malloc(sizeof(ElemType) * MaxSize)
    //(ElemType*)表示强制转换为需要的类型
    //malloc(m):开辟m字节长度的地址空间,并返回这段空间的首地址(参数要求为整数)
    //sizeof(x):计算变量x的长度
    //free(p):释放指针p所指变量的存储空间,即彻底删除一个变量
    //使用内存动态分配函数需要加载头文件:<stdlib.h>
    int length;            //整型变量
}SqList;                   //顺序表类型

C++中的动态存储分配

new 类型名T(初值列表)
  //int *p = new int; 或 int *p = new int(10);
  //功能:
  //  申请用于存放T类型对象的内存空间,并依初值列表赋以初值
  //结果值:
  //  成功:T类型的指针,指向新分配的内存
  //  失败:0(NULL)

要释放指针p所指向的内存,需用 delete 指针p。p必须是new操作的返回值。

C++中的参数传递

  • 函数调用时传送给形参的实参必须与形参三个一致,
    类型、个数、顺序一致

  • 参数传递有两种方式:

    • 传值方式(参数为整型、实型、字符型等)
    • 传地址:
      ①参数为指针变量;
      ②参数为引用类型;
      ③参数为数组名。

传值方式

把实参的值传送给函数局部工作区相应的副本中,函数使用这个副本执行必要的功能。函数修改的是副本的值,实参的值不变。

#include <iostream.h>

void swap(float m,float n)   //m,n为形参
{
    float temp;
    temp = m;
    m = n;
    n = temp;                //交换m、n的值
}

void main()
{
    float a,b;               //定义a,b两个实参
    cin>>a>>b;
    swap(a,b);               //将a传递给m,将b传递给n
    cout<<a<<endl<<b<<endl;  //ab的值无变化
}

传地址方式——指针变量做参数

情况一:形参变化影响实参

#include<iostream.h>

void swap(float *m,float *n)//传递给两个指针变量
{
    float t;                //定义实型变量
    t = *m;                 //交换指针变量所指的内容
    *m = *n;
    *n = t;
}

void mian()
{
    float a,b,*p1,*p2;
    cin>>a>>b;
    p1 = &a;             //p1指向a
    p2 = &b;             //p1指向b
    swap(p1,p2);         //调用函数将两个指针作为实参传递
    cout<<a<<endl<<endl;
}

情况二:形参变化不影响实参

#include<iostream.h>

void swap(float *m,float *n)//传递给两个指针变量
{
    float *t;               //定义指针变量
    t = m;                 //交换指针变量本身
    m = n;
    n = t;
}

void mian()
{
    float a,b,*p1,*p2;
    cin>>a>>b;
    p1 = &a;             //p1指向a
    p2 = &b;             //p1指向b
    swap(p1,p2);         //调用函数将两个指针作为实参传递
    cout<<a<<endl<<endl;
}

传地址方式——数组名做参数

  • 传递的是数组的首地址
  • 队形参数组所做的任何改变都将反映到实参数组中
#include <iostream.h>    
    void sub(char b[])   //传递存放地址的数组,b[]可用*b替代
    {
        b[] = "world";   //给b数组重新赋值
    }

void main(void)          
{
    char a[10] = "hello";//定义一个字符型的a数组,存放了五个字符组成的字符串
    sub(a);              //利用函数,传递了首地址
    cout<<a<<endl;       //a数组已改变
}

例:用数组作为函数的参数,将数组中n个整数按相反的顺序存放,输入和输出在主函数中完成。

#include <iostream.h>
#difine N 10

int max(int a[]);
void main()
{
    int a[10];
    int i,m;
    for(i = 0;i < N;i++)
        cin>>a[i];
    m = max(a);
    cout<<"the max number is: "<<m;
}

int max(int b[])
{
    int i,n;
    n=b[0];
    for(i = 0;i < N;i++)
        if(n < b[i])
            n = b[i]
    return n;
}

传地址方式——引用类型做参数

#include<iostream.h>

void swap(float &m,float &n)//定义两个引用,m引用a,n引用b
{
    float temp;             
    temp = m;               //对m、n的操作即为对a、b的操作
    m = n;
    n = temp;
}

void mian()
{
    float a,b;
    cin>>a>>b;
    swap(p1,p2);         
    cout<<a<<endl<<endl;
}

引用类型做形参的三点说明
(1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化。
(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。
(3)指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参

标签:补充,void,float,C语言,int,数组,实参,数据结构,指针
来源: https://blog.csdn.net/sunyanxian/article/details/121669581

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有