arrays - 使用指针和数组索引将一个数组复制到另一个数组
问题描述
我编写了一个程序,它使用数组索引和指针将一个数组复制到另一个数组中。我要解决的问题是,当我为指针方法打印原始数组和新数组时,我得到相同的东西(即复制的数组),而我真正想要的是打印原始数组,然后是新数组复制的数组。(下面更清楚)
代码
/*
Program to copy the contents of a one-dimensional character array
into another one-dimensional character array using
2 different methods(Pointers and Array Indexing)
*/
#include <stdio.h>
// Declaring both functions
void copyArrayIndexWay(char * const newArray1, const char * const originalArray1);
void copyPointerWay(char *newArray2, const char *originalArray2);
// Little explanation - I declared both arrays here instead of in my main so that my variable size can get the size of
// either array which is used in the for loops for both functions. Hence why I had to delcare it all here if I
// wanted both functions to be able to access the size variable
char array1[] = "deeznuts";
char array2[] = "gotem";
// Declaring variables i and size here which will allow both functions to call them
int size = sizeof(array1), i = 0;
int main(){
// copy 1 into 2
copyArrayIndexWay(array2, array1);
copyPointerWay(array2, array1);
}
// Functin to copy contents using array indexing
void copyArrayIndexWay(char * const newArray, const char * const originalArray){
printf("--Copying Using Array Indexing--\n");
printf("Original Array: %s\n", newArray);
for (i=0; i<size; i++){
newArray[i] = originalArray[i];
}
printf("New Array: %s\n\n\n", newArray);
}
// Function to copy contents using pointers
void copyPointerWay(char *newArray2, const char *originalArray2){
// declare pointers and assign both arrays to a pointer each
const char *orig_arrayPtr;
orig_arrayPtr = originalArray2; // array1
char *new_arrayPtr;
new_arrayPtr = newArray2; // array2
printf("--Copying Using Pointers--\n");
printf("Original Array: %s\n", new_arrayPtr);
for (i=0; i<size; i++){
new_arrayPtr[i] = orig_arrayPtr[i];
}
printf("New Array: %s\n", new_arrayPtr);
}
输出
--Copying Using Array Indexing--
Original Array: gotem
New Array: deeznuts
--Copying Using Pointers--
Original Array: deeznuts
New Array: deeznuts
使用指针的复制应该打印与数组索引方法相同的原始数组,但由于某种原因,它会打印新数组。任何关于为什么会发生这种情况的建议或解释将不胜感激,谢谢:)
解决方案
您观察到的行为被解释为:
最初array2
包含“gotem”
调用后copyArrayIndexWay
,array2
包含“deeznuts”
调用时copyPointerWay
,array2
包含“deeznuts”,“deeznuts”再次写入此位置。这就是为什么您无法观察到内容的变化。
您可以array2
在调用 后为 分配另一个值copyArrayIndexWay
。这样,您将观察到内容的差异。
推荐阅读
- javascript - 在 IE 8 中显示图像,image/abc.gif 和 image\abc.gif 都可以正常工作,但在 IE 11 中却不是。有人可以帮我解决这个问题吗
- r - 如何在没有任何其他依赖项(如 spark、python 等)的情况下将 parquet 文件读取为 R data.frame?
- vue.js - 动画菜单组件的问题
- amazon-web-services - 必须批量移动文件的 Minio/S3 场景
- webrtc - Google Chrome M74 对 WebRTC 的 mDNS 支持
- react-native - React-native build android fail dismatch react-native模块编译版本和运行时版本错误
- python - 获取输入值并在其他模板中显示
- html - 如何更改可调整大小的文本区域的光标?
- android - 使用 SELinux 上下文标记 rootfs(ramdisk)上的文件
- javascript - js中的树视图(纯HTML/CSS/JS)问题