01/10/2018, 00:37
Sao chép mảng trong C
Em không biết làm thế nào để sao chép các số từ mảng 1 (ngoại trừ giá trị lớn nhất vào nhỏ nhất) sang mảng 2 ạ?
Và thêm nữa là tại sao khi em khai báo int n = 5; int ary1[n]; thì lại báo lỗi ạ?
bài này yêu cầu dùng con trỏ nên em hơi loạn ạ. yêu cầu là trừ lúc khai báo mảng thì không được sử dụng ký hiệu [] trong bài luôn ạ
int main(void)
{
int ary1[5], ary2[3]; int *pa1, *pa2;
pa1 = ary1;
pa2 = ary2;
int i;
printf("1. nhap 5 so:
");
for (int i = 0; i < 5; i++)
{
printf("so thu %d:
", i+1);
scanf("%d", pa1 + i);
}
for (i = 0; i < 5; i++)
printf("2. so thu %d da nhap %d
",i+1, *(pa1 + i));
int max = *pa1;
int min = *pa1;
for (i = 0; i < 5; i++)
{
if (max < *(pa1 + i)) max = *(pa1 + i);
if (min > *(pa1 + i)) min = *(pa1 + i);
};
printf("max %d
", max);
printf("min %d
", min);
return 0;
}
Bài liên quan
Gán từng phần tử của mảng 1 sang mảng 2 thôi.
Còn code của bạn thực chất là cho con trỏ
pa1
vàpa2
trỏ đếnary1
vàary2
thôi chứ không phải gán mảng này sang mảng kia.Khi khai báo mảng, số lượng phần tử trong ngoặc vuông phải là 1 số hoặc 1 hằng.
Nên phải ghi
const int n = 5; int arr[n];
thì nó mới chịu hoặc#define
…Loạn là sao ? Bạn học con trỏ chưa ?
Thì thay
[]
bằng*(arr + i)
… giống trong code bạn thôi.Giải thích:
arr
là 1 mảng đã khai báo nhưng đồng thời nó cũng mang địa chỉ của ô nhớ đầu tiên trong mảng (&arr[0]
). Vậy thì muốn lấy địa chỉ của ô nhớ thứ 4 trong mảng chẳng hạn, ta ghiarr + 3
. Nhưng vì đề bài yêu cầu ta lấy giá trị nên dùng toán tử*
để lấy giá trị của con trỏ*(arr + 3)
…anh nói rõ hơn được không ạ?
code thì đúng là em mới trỏ đến con trỏ chứ chưa biết cách dùng ạ
Giả dụ bạn có 1 mảng arr như thế này:
int arr[] = {1, 2, 3, 4, 5};
và 1 mảng khác là array:
int array[5];
Bây giờ bạn muốn copy mảng
arr
quaarray
đúng không, thì copy từng phần tử của mảngarr
sangarray
thôi.như thế thì em biết ạ nhưng làm sao để loại trừ giá trị lớn nhất, nhỏ nhất và chỉ sao chép các giá trị còn lại thì em chưa biết ạ
Bạn tìm Maximum value và Minimum value trong cái mảng đó.
Rồi trong vòng lặp, bạn chỉ dùng
if
để loại trừ sao chép 2 cái Maximum value và Minimum value đó thôi !