Latest web development tutorials
×

C หลักสูตร

C กวดวิชาภาษา C แนะนำโดยย่อ C การตั้งค่าสภาพแวดล้อม C โครงสร้างหลักสูตร C ไวยากรณ์พื้นฐาน C ชนิดข้อมูล C ตัวแปร C คงที่ C ประเภทการจัดเก็บ C ผู้ประกอบการ C ผู้พิพากษา C การไหลเวียน C ฟังก์ชัน C การกำหนดขอบเขตกฎระเบียบ C แถว C ชี้ C เชือก C โครงสร้าง C สหภาพ C ฟิลด์บิต C typedef C อินพุตและเอาต์พุต C การอ่านออกเขียนเอกสาร C preprocessor C ส่วนหัว C ปลดเปลื้อง C จัดการข้อผิดพลาด C recursion C พารามิเตอร์ตัวแปร C จัดการหน่วยความจำ C บรรทัดคำสั่ง C คลาสสิก 100 ราย

C ห้องสมุดมาตรฐาน

C ห้องสมุดมาตรฐาน - คู่มืออ้างอิง C ห้องสมุดมาตรฐาน - <assert.h> C ห้องสมุดมาตรฐาน - <ctype.h> C ห้องสมุดมาตรฐาน - <errno.h> C ห้องสมุดมาตรฐาน - <float.h> C ห้องสมุดมาตรฐาน - <limits.h> C ห้องสมุดมาตรฐาน - <locale.h> C ห้องสมุดมาตรฐาน - <math.h> C ห้องสมุดมาตรฐาน - <setjmp.h> C ห้องสมุดมาตรฐาน - <signal.h> C ห้องสมุดมาตรฐาน - <stdarg.h> C ห้องสมุดมาตรฐาน - <stddef.h> C ห้องสมุดมาตรฐาน - <stdio.h> C ห้องสมุดมาตรฐาน - <stdlib.h> C ห้องสมุดมาตรฐาน - <string.h> C ห้องสมุดมาตรฐาน - <time.h>

C พารามิเตอร์ตัวแปร

บางครั้งคุณอาจจะพบกับสถานการณ์ดังกล่าวที่คุณต้องการที่จะทำงานที่มีจำนวนตัวแปรของการขัดแย้งมากกว่าจำนวนที่กำหนดไว้ล่วงหน้าของการขัดแย้ง ภาษา C สำหรับสถานการณ์นี้ให้บริการโซลูชั่นที่ช่วยให้คุณสามารถกำหนดฟังก์ชั่นที่สามารถรับจำนวนตัวแปรของพารามิเตอร์ตามความต้องการที่เฉพาะเจาะจงได้ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงความหมายของการเช่นฟังก์ชั่น

int func(int, ... ) 
{
   .
   .
   .
}

int main()
{
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

โปรดทราบว่าfunc () ฟังก์ชันการขัดแย้งเขียนสุดท้ายจุดไข่ปลาว่าสามจุด ( ... ) ข้อโต้แย้งว่าก่อนที่จะจุดไข่ปลาอยู่เสมอint คิดเป็นจำนวนรวมของตัวแปรที่จะผ่าน เพื่อใช้คุณลักษณะนี้คุณจำเป็นต้องใช้ไฟล์ส่วนหัวstdarg.h ที่ให้การทำงานของพารามิเตอร์ตัวแปรเพื่อให้บรรลุหน้าที่และมาโครเฉพาะขั้นตอนดังต่อไปนี้:

  • ความหมายของฟังก์ชั่นพารามิเตอร์ที่ผ่านมาเป็นจุดไข่ปลา, จุดไข่ปลาในด้านหน้าของพารามิเตอร์อยู่เสมอint หมายถึงจำนวนพารามิเตอร์
  • สร้างตัวแปรประเภทva_list ในความหมายฟังก์ชั่นประเภทนี้ถูกกำหนดไว้ใน stdarg.h ไฟล์ส่วนหัว
  • พารามิเตอร์Int และการใช้แมโคร va_startที่จะเริ่มต้นตัวแปรva_listเป็นรายการพารามิเตอร์ แมโคร va_start Stdarg.h ถูกกำหนดไว้ในไฟล์ส่วนหัว
  • ใช้แมโครva_arg และตัวแปร va_listเพื่อเข้าถึงรายการของพารามิเตอร์สำหรับแต่ละรายการ
  • ใช้แมโครเพื่อทำความสะอาดหน่วยความจำตัวแปรva_end va_list

ให้เราทำตามขั้นตอนข้างต้นจะเขียนฟังก์ชั่นที่มีจำนวนตัวแปรของการขัดแย้งและผลตอบแทนเฉลี่ยของพวกเขา

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)
{

    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
       sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum/num;
}

int main()
{
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการจะผลิตผลดังต่อไปนี้มันควรจะตั้งข้อสังเกตว่าค่าเฉลี่ย () ฟังก์ชันที่เรียกว่าสองครั้งในแต่ละครั้งพารามิเตอร์ตัวแรกหมายถึงจำนวนทั้งหมดจะถูกโอนตัวแปรจุดที่ใช้ในการส่งมอบจำนวนตัวแปรของการขัดแย้ง

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000