โจทย์
คำนวณผลรวมเลขคู่และเลขคี่ในชุดข้อมูล โดยใช้ Dynamic Memory Allocation
ตรรกะการคำนวณ
// Even
if (*(p + i) % 2 == 0)
even += *(p + i);
// Odd
else
odd += *(p + i);
ตัวอย่างโปรแกรมสมบูรณ์
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, *p, i, even = 0, odd = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
// จอง Memory
p = (int *)malloc(n * sizeof(int));
if (p == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// รับข้อมูล
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++)
scanf("%d", p + i);
// คำนวณ
for (i = 0; i < n; i++) {
if (*(p + i) % 2 == 0)
even += *(p + i);
else
odd += *(p + i);
}
printf("Sum of even numbers: %d\n", even);
printf("Sum of odd numbers: %d\n", odd);
free(p);
return 0;
}
ผลลัพธ์:
Enter number of elements: 5
Enter 5 elements:
34 23 12 11 45
Sum of even numbers: 46
Sum of odd numbers: 79
การเข้าถึง Array ผ่าน Pointer
| Notation | Equivalent | คำอธิบาย |
|---|---|---|
p[i] | *(p + i) | Element ที่ i |
&p[i] | p + i | Address ของ Element i |
*(p + i) | p[i] | Dereference |
ข้อดีของ Dynamic Array
- ขนาด Array ไม่ต้องกำหนดตอน Compile
- ผู้ใช้กำหนดขนาดได้ตอน Run
- ประหยัด Memory (จองแค่ที่ต้องการ)
- สามารถ Resize ได้ด้วย
realloc()