ผมมีคำถามอยากรบกวนสอบถาม 2 คำถามดังนี้ครับ
1. ผมเรียกใช้ฟังก์ชันดังข้างล่างต่อไปนี้ โดยก่อนหน้านี้ ผมมีฟังก์ชัน main() ซึ่งฟังก์ชัน main() จะกำหนดค่า no_user ผ่านทาง คำสั่ง scanf จากนั้นเรียกฟังก์ชัน test ซึ่งมีตัวแปร no_user เป็น parameter หนึ่ง
แต่เมื่อผมกำหนดให้ int stage[no_user] = {1}; ดังข้างล่างนี้ กลับมีข้อความ
error : variable-sized object may not be initialized
void test(int no_user)
{
int stage[no_user] = {1};
....
}
ผมแก้ปัญหาเบื้องต้นโดยเขียนดังนี้
void test(int no_user)
{
int stage[no_user];
....
}
และค่อยไปวนลูปเพื่อกำหนดค่าให้สมาชิกของ array stage ทุกตัวเท่ากับ 1
อยากทราบว่า พอจะมีทางอื่นไหมครับ ที่ผมไม่ต้องวนลูป และกำหนดค่าเริ่มต้นตอนประกาศตัวแปรอย่างได้เลย
2. หากผมมีตัวแปร array ซึ่งไม่ทราบขนาดที่แน่ชัด และขณะที่ Run program ขนาดของ array อาจจะเพิ่มขึ้นหรือลดลงได้
ผมจึงเลือกประกาศตัวแปรดังนี้
int *stage;
หากต้องการกำหนดให้ array stage มีสมาชิก 2 ตัว ผมจะใช้
stage = malloc(2 * sizeof(int));
ทีนี้ตอนที่ผมต้องการปรับขนาด array stage เพิ่มขึ้นเป็น 5 ตัว ผมใช้
stage = realloc(stage, 5 * sizeof(int));
ส่วนใหญ่ผมจะเห็นการใช้งาน realloc ตอนที่จะเพิ่มขนาด array แต่ยังไม่เคยเห็นตอนที่จะลดขนาด array
ผมจึงอยากรบกวนสอบถามว่า หากผมต้องการลดขนาด array stage จากสมาชิก 5 ตัว เป็นสมาชิก 3 ตัว ผมสามารถเรียกใช้คำสั่งต่อไปนี้ได้ไหมครับ
stage = realloc(stage, 3 * sizeof(int));
หรือมีวิธีการอื่น ๆ อีกไหมครับ ในการเพิ่มและลดขนาด array
ขอบคุณล่วงหน้าสำหรับคำตอบครับ
ถามเรื่องการกำหนดค่าเริ่มต้นของ Array และการจองขนาดพื้นที่โดยใช้ malloc และ realloc ในภาษาซี
1. ผมเรียกใช้ฟังก์ชันดังข้างล่างต่อไปนี้ โดยก่อนหน้านี้ ผมมีฟังก์ชัน main() ซึ่งฟังก์ชัน main() จะกำหนดค่า no_user ผ่านทาง คำสั่ง scanf จากนั้นเรียกฟังก์ชัน test ซึ่งมีตัวแปร no_user เป็น parameter หนึ่ง
แต่เมื่อผมกำหนดให้ int stage[no_user] = {1}; ดังข้างล่างนี้ กลับมีข้อความ
error : variable-sized object may not be initialized
void test(int no_user)
{
int stage[no_user] = {1};
....
}
ผมแก้ปัญหาเบื้องต้นโดยเขียนดังนี้
void test(int no_user)
{
int stage[no_user];
....
}
และค่อยไปวนลูปเพื่อกำหนดค่าให้สมาชิกของ array stage ทุกตัวเท่ากับ 1
อยากทราบว่า พอจะมีทางอื่นไหมครับ ที่ผมไม่ต้องวนลูป และกำหนดค่าเริ่มต้นตอนประกาศตัวแปรอย่างได้เลย
2. หากผมมีตัวแปร array ซึ่งไม่ทราบขนาดที่แน่ชัด และขณะที่ Run program ขนาดของ array อาจจะเพิ่มขึ้นหรือลดลงได้
ผมจึงเลือกประกาศตัวแปรดังนี้
int *stage;
หากต้องการกำหนดให้ array stage มีสมาชิก 2 ตัว ผมจะใช้
stage = malloc(2 * sizeof(int));
ทีนี้ตอนที่ผมต้องการปรับขนาด array stage เพิ่มขึ้นเป็น 5 ตัว ผมใช้
stage = realloc(stage, 5 * sizeof(int));
ส่วนใหญ่ผมจะเห็นการใช้งาน realloc ตอนที่จะเพิ่มขนาด array แต่ยังไม่เคยเห็นตอนที่จะลดขนาด array
ผมจึงอยากรบกวนสอบถามว่า หากผมต้องการลดขนาด array stage จากสมาชิก 5 ตัว เป็นสมาชิก 3 ตัว ผมสามารถเรียกใช้คำสั่งต่อไปนี้ได้ไหมครับ
stage = realloc(stage, 3 * sizeof(int));
หรือมีวิธีการอื่น ๆ อีกไหมครับ ในการเพิ่มและลดขนาด array
ขอบคุณล่วงหน้าสำหรับคำตอบครับ