目录
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
被定义为接受两个浮点数的值作为参数,但是在函数内部交换了这两个局部变量(m
和n
)的值,这并不会影响在main
函数中定义的a
和b
的值。
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++程序,它使用指针来交换两个浮点数的值。下面是对代码的详细解释:
- 包含头文件
#include <iostream.h>
这里包含了一个头文件
<iostream.h>
,但在现代C++标准中,通常使用<iostream>
而不是<iostream.h>
。<iostream.h>
是某些编译器旧版本的头文件,现在已经不被推荐使用。
- 定义swap函数
void swap(float *m,float *n){
float t;
t = *m;
*m = *n;
*n = t;
}
这个函数接受两个指向浮点数的指针
m
和n
作为参数。在函数内部,它创建了一个临时变量t
来存储*m
(即m
指针指向的值)的值。然后,它将*n
(即n
指针指向的值)的值赋给*m
,最后将t
(原来*m
的值)赋给*n
。这样,m
和n
所指向的值就被交换了。
- main函数
void main(){
float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}
- 声明了两个浮点变量
a
和b
,以及两个浮点指针p1
和p2
。- 使用
cin
从标准输入读取两个浮点数的值,并赋给a
和b
。- 使用
&
操作符获取a
和b
的地址,并将这些地址赋给指针p1
和p2
。- 调用
swap
函数,将p1
和p2
(即a
和b
的地址)作为参数传递。这样,swap
函数内部的操作会交换a
和b
的值。- 使用
cout
输出交换后的a
和b
的值。
形参变化不影响实参变化:
#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;
}
- 定义swap函数
void swap(float *m,float *n){ | |
float *t; | |
t = m; | |
m = n; | |
n = t; | |
} |
这个函数接受两个指向浮点数的指针m
和n
。在函数内部,它定义了一个指针t
,并交换了m
和n
的值。但是,这并没有改变m
和n
所指向的浮点数的值,只是改变了这两个指针本身的指向。
- main函数
void main(){ | |
float a,b,*p1,*p2; | |
cin>>a>>b; | |
p1=&a;p2=&b; | |
swap(p1,p2); | |
cout<<a<<endl<<b<<endl; | |
} |
- 声明了两个浮点变量
a
和b
,以及两个浮点指针p1
和p2
。 - 使用
cin
从标准输入读取两个浮点数的值,并赋给a
和b
。 - 使用
&
操作符获取a
和b
的地址,并将这些地址赋给指针p1
和p2
。 - 调用
swap
函数,将p1
和p2
作为参数传递。然而,如前面所述,这个函数并没有交换a
和b
的值。 - 使用
cout
输出a
和b
的值。由于swap
函数没有正确地交换它们,输出的值将是输入时读取的原始值。
2.传递地址方式--数组名作参数
1.传递的是数组的首地址
2.对形参组所做的任何改变都将反应到实参数组中