1.两个相同类型的数组:
eg:两个字符数组:
void print(char arr[],int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%c ", arr[i]);
}
}
int main()
{
char A[5] = { 'a','b','c','d','e' };
char B[5] = {'1','2','3','4','5'};
int sz = sizeof(A) / sizeof(A[0]);
print(A, sz);
printf("\n");
print(B, sz);
printf("\n");
int i = 0;
int j = 0;
char temp;
while (i < 5&&j<5)
{
temp = A[i];
A[i] = B[j];
B[j] = temp;
i++;
j++;
}
print(A, sz);
printf("\n");
print(B, sz);
return 0;
}
eg:两个整型数组
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int A[5] = {1,2,3,4,5};
int B[5] = {6,7,8,9,10};
int sz = sizeof(A) / sizeof(A[0]);
print(A, sz);
printf("\n");
print(B, sz);
printf("\n");
int i = 0;
int j = 0;
int temp;
while (i < 5)
{
temp = A[i];
A[i] = B[j];
B[j] = temp;
i++;
j++;
}
print(A, sz);
printf("\n");
print(B, sz);
return 0;
}
本质上是一样的,交换对应位置的数组中的元素,之后进行打印
2.尝试交换不同类型的数组中的元素:
整型数组与浮点型数组的交换:
void swapIntAndFloat(int* intArr, float* floatArr, int index1, int index2) {
int a = intArr[index1];
float b = floatArr[index2];//intArr是第一个数组的数组名;floatArr是第二个数组的数组名;
//*intArr是利用指针 等价于arr[];
intArr[index1] = (int)b;
floatArr[index2] = (float)a;
}
int main() {
int intArr[] = { 1, 2, 3 };
float floatArr[] = { 1.1, 2.2, 3.3 };
int index1 = 0;
int index2 = 1;
swapIntAndFloat(intArr, floatArr, index1, index2);
printf("After swapping:\n");
printf("intArr: %d %d %d\n", intArr[0], intArr[1], intArr[2]);
printf("floatArr: %.1f %.1f %.1f\n", floatArr[0], floatArr[1], floatArr[2]);
return 0;
}
那么有结果可知:警告为:从double到float截断,并且交换过后的结果并不是原数组的元素,所以不能发生完全的转换!
整型数组与字符数组的转换:
void swapCharAndInt(char* charArr, int* intArr, int index1, int index2) {
char tempChar = charArr[index1];
int tempInt = intArr[index2];
charArr[index1] = (char)tempInt;
intArr[index2] = (int)tempChar;
}
int main() {
char charArr[] = { 'a', 'b', 'c' };
int intArr[] = { 1,2, 3 };
int index1 = 0;
int index2 = 1;
swapCharAndInt(charArr, intArr, index1, index2);
printf("After swapping:\n");
printf("charArr: %c %c %c\n", charArr[0], charArr[1], charArr[2]);
printf("intArr: %d %d %d\n", intArr[0], intArr[1], intArr[2]);
return 0;
}
由结果可知:交换过后的结果还是各自都自动转换成了原来的数组类型
所以综上所述:两个不同类型的数组之间的交换是不可能的;数组是提前已经声明的,不可再改变其数组的类型!