c語言數組復制
⑴ c語言中怎麼把一維數組賦給另外一個一維數組
可以採用兩種方式:
1、按元素賦值:
遍歷一維數組,並將每個元素賦值到二維數組的對應元素上。
或者遍歷二維數組,將每個元素賦值為一維數組對應值上。
優點為操作靈活,可以按照需要任意賦值。
2、當一維數組和二維數組類型相同,而且賦值順序與一維數組中的存儲順序完全相同時,可以用memcpy的方式,直接一次性賦值。
如一維數組為a,二維數組為b,基礎類型為TYPE,需賦值元素個數為n,可以調用
memcpy(b,a,sizeof(TYPE)*n);
該方法有點為操作簡單,執行效率高。
不過所需滿足的前提條件多。在滿足上述所有條件時,用memcpy的方式更為簡單。
(1)c語言數組復制擴展閱讀:
C語言中,賦值運算的操作是有方向的,即將右側表達式的值(也稱為右值)賦值左側的變數,只能是標識一個特定存儲單元的變數名。
由於變數名只能出現在賦值運算符的左邊,因此它也被稱為左值;由於常量只能出現在賦值運算符的右邊,因此它也被稱為右值。左值可以用作右值,但右值不能用作左值。
結構體的相關操作規則:
1、可以引用一個結構體變數中的一個成員的值:
例如,student1.num表示結構體變數student1中的成員的值,student1.num的值為10001。引用結構體變數中成員的一般方式為:結構體變數名.成員名。例如可以這樣對變數的成員賦值:student1.num=10010;
2、不能將一個結構體變數作為一個整體進行輸入和輸出:
例如,已定義student1和student2為結構體變數,並且它們已有值。不能企圖這樣輸出結構體變數中的各成員的值:cin>>student1;只能對結構體變數中的各個成員分別進行輸入和輸出。
⑵ C語言中如何復制數組的內容
C語言中復制數組的內容源代碼如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 10
void show_array(const int ar[], int n);
int main()
{
int values[SIZE] = {1,2,3,4,5,6,7,8,9,10};
int target[SIZE];
double curious[SIZE / 2] =
{2.0, 2.0e5, 2.0e10, 2.0e20, 5.0e30};
puts("memcpy() used:");
puts("values (original data): ");
show_array(values, SIZE);
memcpy(target, values, SIZE * sizeof(int));
puts("target ( of values):");
show_array(target, SIZE);
puts("
Using memmove() with overlapping ranges:");
memmove(values + 2, values, 5 * sizeof(int));
puts("values -- elements 0-5 copied to 2-7:");
show_array(values, SIZE);
puts("
Using memcpy() to double to int:");
memcpy(target, curious, (SIZE / 2) * sizeof(double));
puts("target -- 5 doubles into 10 int positions:");
show_array(target, SIZE/2);
show_array(target + 5, SIZE/2);
system("pause");
return 0;
}
void show_array(const int ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", ar[i]);
putchar('
');
}
(2)c語言數組復制擴展閱讀
1、C語言編程中,將常用的操作封裝成函數進行調用,可以大大簡化程序的編寫,而且在代碼的維護性及可讀性方面也提供了便利。
2、不同地方需要對處理後的數組內容多次進行顯示,並且很多情況下並非顯示數組裡面的全部內容,而僅僅是想觀察數組中的部分數據內容,若每次顯示時都用printf函數寫的話,可以寫一個自定義的通用函數,用來根據需要顯示數組中的內容。
⑶ C 拷貝數組的幾種方式
在日常編程過程中,我們可能經常需要Copy各種數組,一般來說有以下幾種常見的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffer.BlockCopy,以及System.Buffer.memcpyimpl,由於最後一種需要使用指針,所以本文不引入該方法。
本次測試,使用以上前4種方法,各運行1000萬次,觀察結果。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
namespace BenchmarkCopyArray
{
class Program
{
private const int TestTimes = 10000000;
static void Main()
{
var testArrayCopy = new TestArrayCopy();
TestCopy(testArrayCopy.TestBinaryReader, "Binary.ReadBytes");
TestCopy(testArrayCopy.TestConvertToList, "ConvertToList");
TestCopy(testArrayCopy.TestArrayDotCopy, "Array.Copy");
TestCopy(testArrayCopy.TestBlockCopy, "Buffer.BlockCopy");
Console.Read();
}
private static void TestCopy(Action testMethod, string methodName)
{
var stopWatch = new Stopwatch();
stopWatch.Start();
for (int i = 0; i < TestTimes; i++)
{
testMethod();
}
testMethod();
stopWatch.Stop();
Console.WriteLine("{0}: {1} seconds, {2}.", methodName, stopWatch.Elapsed.Seconds, stopWatch.Elapsed.Milliseconds);
}
}
class TestArrayCopy
{
private readonly byte[] _sourceBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
public void TestBinaryReader()
{
var binaryReader = new BinaryReader(new MemoryStream(_sourceBytes));
binaryReader.ReadBytes(_sourceBytes.Length);
}
public void TestConvertToList()
{
IList<byte> bytesSourceList = new List<byte>(_sourceBytes);
var bytesNew = new byte[_sourceBytes.Length];
bytesSourceList.CopyTo(bytesNew, 0);
}
public void TestArrayDotCopy()
{
var bytesNew = new byte[_sourceBytes.Length];
Array.Copy(_sourceBytes, 0, bytesNew, 0, _sourceBytes.Length);
}
public void TestBlockCopy()
{
var bytesNew = new byte[_sourceBytes.Length];
Buffer.BlockCopy(_sourceBytes, 0, bytesNew, 0, _sourceBytes.Length);
}
}
}
⑷ c語言如何實現多維整型數組的復制
有兩種常用的方法。
1 對數組各個維循環,遍歷每個元素,並將其賦值到目標數組的對應位置上。
缺點:代碼相對復雜。
優點:可以不不同大小和形式的數組進行交叉復制。
2 利用C語言中多維數組元素存儲連續性,使用memcpy函數整體復制。
缺點:僅使用源數組要復制的數據是連續的,同時在目標數組中以同樣順序連續復制的情況。
優點:代碼簡單,一個函數調用即可完成賦值。相對第一種,執行效率略高。
⑸ c語言 復制數組
strcpy(t[i],a[j],n);該語句的意思是:將某已知二維數組a的第j行前n個字元復制到另一個二維數組t的第i行中。給分吧
⑹ C語言 復制一個數組到另外一個數組的問題 哪裡出錯了呢
#include <stdio.h>
#define SIZE 5
double _arr(double sou[],double tar1[],int n);
int main(void)
{
double source[SIZE]={1.1,2.2,3.3,4.4,5.5};
double tar1[SIZE];
_arr(source,tar1,SIZE);
return 0;
}
double _arr(double sou[],double tar1[],int n)
{
int i;
for(i=0;i<n;i++)
{
tar1[i]=sou[i];
printf("%lf ",tar1[i]);
}
}
注意子函數形參,要和你主函數代入的參數一致。
前兩參都是double型的數組,所以聲明聲明和定義時要加
double 參數名[]。
或者用樓上的所說加*號,指針形式,不過猜想你可能還沒學到指針。
⑺ c語言字元數組可以直接用等號復制嗎
不可以,復制一個數組需要一個一個元素進行拷貝。
但是你可以用指針復制數組的首地址,創造一個與原數組共享存儲空間的「假數組」