c++ - 在 C 或 C++ 上交换指针
问题描述
为什么第一个选项不起作用?“pointer->malloc”和“type []”之间有区别吗?动态保留内存的一部分?
int a[10];
int b[10];
int *aux;
aux=a;
a=b;
b=aux;
int *a=(int*)malloc(10);
int *b=(int*)malloc(10);
int *aux;
aux=a;
a=b;
b=aux;
解决方案
在这段代码中:
int a[10];
int b[10];
int *aux;
aux=a;
a=b;
b=aux;
该语句aux=a;
有效,因为a
衰减为指向其第一个元素的指针。所以这实际上与aux=&a[0];
该语句a=b;
不起作用,因为a
andb
都是数组,并且数组根本不能以这种方式复制。您正在尝试这样做&a[0]=&b[0];
,但这根本行不通。您不能在内存中重新分配变量的地址。
如果您std::array
改为使用,那么该语句a=b;
将起作用,就像std::array
已operator=
实现的那样,它只是将每个元素从一个数组复制到另一个数组。但是,如果您不使用std::array
,则必须手动复制元素,使用memcpy()
或更好std::copy()
。
该语句b=aux;
不起作用,因为b
它是一个数组并且aux
是一个指针,并且您不能将指针分配给数组。
对于您尝试做的事情,您将不得不更改aux
为一个数组,并将元素从一个数组复制到另一个数组,例如:
#include <algorithm>
int a[10];
int b[10];
int aux[10];
std::copy(a, a+10, aux);
std::copy(b, b+10, a);
std::copy(aux, aux+10, b);
或者,使用std::array
,它可以为你做副本:
#include <array>
std::array<int, 10> a;
std::array<int, 10> b;
std::array<int, 10> aux;
aux = a;
a = b;
b = aux;
而在其他代码中:
int *a=(int*)malloc(10);
int *b=(int*)malloc(10);
int *aux;
aux=a;
a=b;
b=aux;
您只是在交换相同类型的指针 ( int*
),它们实际指向什么并不重要,您没有触及该数据。顺便说一句,(int*)malloc(10)
对于数组来说是错误的int
,它需要(int*)malloc(sizeof(int)*10)
代替。
推荐阅读
- sql-server - SQL Server(通过 Pentaho):删除时间太长,每秒只有两行
- oracle - 通过添加嵌入在 PL-SQL(Oracle 函数)中的 select 子句来处理异常
- php - 如何在 OctoberCMS 列表中显示开关类型的“非活动/活动”?
- python-3.x - 使用 selenium 搜索 Salesforce
- hadoop - Tez 容器是在 YARN 容器内运行,还是代替 YARN 容器运行?
- r - 如何根据条件计算 R 中数据框列的百分比?
- xmgrace - xmgrace 可以生成一维图吗?
- python - 将 .csv 文件作为 .py 程序中的列表访问的正确语法是什么?(如果可能的话)
- npm - 如何使用 npm 使用通配符在多个目录中运行测试
- c# - 绑定到 UWP 中的视图模型和源实体