数据结构与算法

目录

1.静态分配数组

2.数组动态分配

形参变化影响实参:

形参变化不影响实参变化:


1.静态分配数组

typedef struct {
    ElemType *data;
    int length;
}SqList;//

2.数组动态分配

数组的本质是指针,具体实现数组是基于指针实现的,编译器只提供了首元素的地址,假设存在数组a[0],当我们访问第二个数组时可以使用a[1],同样的指针表示为*(a+1)

补充:C

malloc(m)函数,开辟m字节长度的地址空间,返回这段空间的首地址。

sizeof(x)函数,计算变量x的长度。

free(p)函数,释放指针p所指变量的存储空间,即彻底删除一个变量。

C++的动态存储分配:

功能:申请用于存放T类型对象的存储空间、并依初值赋初值结果:

成功:T类型i的指针,指向新的分配内存。

失败:0(NULL)

int *p1 = new int;
int *p1 = new int(10);

delete 指针P

功能:释放指针P所指向的内存,P必须是new操作的返回值。

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

#include <iostream.h>
void swap(float m,float n)
{float temp;
temp=m;
m=n;
n=temp;}
void main()
{
float a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;}

这段代码尝试实现两个浮点数的交换,但是存在一个关键的错误。函数swap被定义为接受两个浮点数的值作为参数,但是在函数内部交换了这两个局部变量(mn)的值,这并不会影响在main函数中定义的ab的值。 

1.传地址方式--指针变量做参数

形参变化影响实参:

#include <iostream.h>
void swap(float *m,float *n){
    float t;
    t = *m;
    *m = *n;
    *n = t;}

void main(){
    float a,b,*p1,*p2;
    cin>>a>>b;
    p1=&a;p2=&b;
    swap(p1,p2);
    cout<<a<<endl<<b<<endl;
}

这段代码是一个C++程序,它使用指针来交换两个浮点数的值。下面是对代码的详细解释:

  1. 包含头文件
#include <iostream.h>

这里包含了一个头文件<iostream.h>,但在现代C++标准中,通常使用<iostream>而不是<iostream.h><iostream.h>是某些编译器旧版本的头文件,现在已经不被推荐使用。

  1. 定义swap函数
void swap(float *m,float *n){
float t;
t = *m;
*m = *n;
*n = t;
}

这个函数接受两个指向浮点数的指针mn作为参数。在函数内部,它创建了一个临时变量t来存储*m(即m指针指向的值)的值。然后,它将*n(即n指针指向的值)的值赋给*m,最后将t(原来*m的值)赋给*n。这样,mn所指向的值就被交换了。

  1. main函数
void main(){
float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}
  • 声明了两个浮点变量ab,以及两个浮点指针p1p2
  • 使用cin从标准输入读取两个浮点数的值,并赋给ab
  • 使用&操作符获取ab的地址,并将这些地址赋给指针p1p2
  • 调用swap函数,将p1p2(即ab的地址)作为参数传递。这样,swap函数内部的操作会交换ab的值。
  • 使用cout输出交换后的ab的值。

形参变化不影响实参变化:

#include <iostream.h>
void swap(float *m,float *n){
    float *t;
    t = m;
    m=n;
    n = t;
}
void main(){
    float a,b,*p1,*p2;
    cin>>a>>b;
    p1=&a;p2=&b;
    swap(p1,p2);
    cout<<a<<endl<<b<<endl;
}
    
  1. 定义swap函数
void swap(float *m,float *n){
float *t;
t = m;
m = n;
n = t;
}

这个函数接受两个指向浮点数的指针mn。在函数内部,它定义了一个指针t,并交换了mn的值。但是,这并没有改变mn所指向的浮点数的值,只是改变了这两个指针本身的指向。

  1. main函数
void main(){
float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}
  • 声明了两个浮点变量ab,以及两个浮点指针p1p2
  • 使用cin从标准输入读取两个浮点数的值,并赋给ab
  • 使用&操作符获取ab的地址,并将这些地址赋给指针p1p2
  • 调用swap函数,将p1p2作为参数传递。然而,如前面所述,这个函数并没有交换ab的值。
  • 使用cout输出ab的值。由于swap函数没有正确地交换它们,输出的值将是输入时读取的原始值。

2.传递地址方式--数组名作参数

1.传递的是数组的首地址

2.对形参组所做的任何改变都将反应到实参数组中

  • 34
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值