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 ตัวชี้เรื่องง่ายและสนุก ผ่านตัวชี้คุณสามารถลดความซับซ้อนของการดำเนินการบางส่วนของงานเขียนโปรแกรม C มีงานบางอย่างเช่นการจัดสรรหน่วยความจำแบบไดนามิกไม่มีตัวชี้จะไม่มีผลบังคับใช้ ดังนั้นผมอยากจะเป็นโปรแกรมเมอร์ C ดีชี้การเรียนรู้เป็นสิ่งที่จำเป็น

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

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("var1 变量的地址: %x\n", &var1  );
   printf("var2 变量的地址: %x\n", &var2  );

   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

var1 变量的地址: bff5a400
var2 变量的地址: bff5a3f6

โดยวิธีการเช่นข้างต้นเราเข้าใจสิ่งที่อยู่หน่วยความจำและวิธีการเข้าถึงได้ ลองดูที่สิ่งที่เป็นตัวชี้

ตัวชี้คืออะไร?

ตัวชี้เป็นตัวแปรที่มีค่าที่อยู่ของตัวแปรอื่นคือที่อยู่ตรงกับที่ตั้งหน่วยความจำก่อนที่จะชอบหรือตัวแปรอื่น ๆ คงที่คุณต้องใช้หน่วยความจำที่อยู่ที่ตัวชี้ของตัวแปรอื่น ๆ ก็มีการประกาศ รูปแบบทั่วไปของการประกาศตัวแปรชี้คือ

type *var-name;

นี่พิมพ์เป็นตัวชี้ประเภทฐานที่มันจะต้องเป็นที่ถูกต้อง C ชนิดข้อมูลvar คือชื่อของตัวแปรตัวชี้ จะใช้ในการประกาศตัวชี้เครื่องหมาย * คูณใช้เครื่องหมายดอกจันเป็นเหมือนกัน แต่ในคำสั่งนี้ดอกจันถูกใช้เพื่อระบุตัวแปรที่เป็นตัวชี้ ต่อไปนี้เป็นคำประกาศชี้ที่ถูกต้อง:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch     /* 一个字符型的指针 */

ทั้งหมดชี้ชนิดของข้อมูลที่เกิดขึ้นจริงของค่าไม่ว่าจะเป็นจำนวนเต็มลอยสตริงหรือชนิดข้อมูลอื่น ๆ ที่เหมือนกันคือเลขฐานสิบหกหมายถึงการอยู่หน่วยความจำระยะยาว ข้อแตกต่างระหว่างประเภทที่แตกต่างกันของตัวชี้ข้อมูลตัวชี้เป็นตัวแปรหรือคงที่ชนิดข้อมูล

วิธีการใช้ตัวชี้?

บ่อยครั้งที่จะใช้ตัวชี้เมื่อการดำเนินการดังต่อไปนี้: กำหนดตัวแปรชี้ที่อยู่ตัวแปรที่กำหนดให้กับตัวชี้เข้าถึงค่าของตัวแปรที่อยู่ที่มีตัวชี้ นี้จะกระทำโดยใช้ตัวดำเนินการ* เอกจะกลับค่าของตัวแปรตั้งอยู่ในที่อยู่ของตัวถูกดำเนินการตามที่ระบุไว้ตัวอย่างต่อไปนี้เกี่ยวข้องกับการกระทำเหล่านี้:

#include <stdio.h>

int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */

   ip = &var;  /* 在指针变量中存储 var 的地址 */

   printf("Address of var variable: %x\n", &var  );

   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %x\n", ip );

   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

ตัวชี้ C โมฆะ

ในช่วงเวลาของการประกาศตัวแปรหากไม่ได้ที่อยู่ที่แน่นอนจะได้รับมอบหมายให้กำหนดค่า NULL ตัวแปรตัวชี้เป็นวิธีการเขียนโปรแกรมที่ดีค่าตัวชี้ฟูโมฆะเรียกว่าตัวชี้โมฆะ

ตัวชี้โมฆะถูกกำหนดไว้ในค่าคงที่ห้องสมุดมาตรฐานศูนย์ พิจารณาโปรแกรมต่อไปนี้:

#include <stdio.h>

int main ()
{
   int  *ptr = NULL;

   printf("ptr 的值是 %x\n", ptr  );
 
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

ptr 的值是 0

บนระบบปฏิบัติการมากที่สุดโปรแกรมไม่อนุญาตให้เข้าถึงอยู่หน่วยความจำ 0 เพราะหน่วยความจำถูกสงวนไว้สำหรับระบบปฏิบัติการ แต่อยู่หน่วยความจำ 0 มีความสำคัญเป็นพิเศษก็แสดงว่าตัวชี้ไม่ได้ชี้ไปยังสถานที่ที่สามารถเข้าถึงหน่วยความจำ แต่ตามอนุสัญญาว่าถ้าตัวชี้มีค่า null (ศูนย์บาท) มันจะสันนิษฐานว่ามันไม่ได้ชี้ไปที่ใด

เพื่อตรวจสอบตัวชี้โมฆะ, คุณสามารถใช้ถ้ามีคำสั่งดังต่อไปนี้:

if(ptr)     /* 如果 p 非空,则完成 */
if(!ptr)    /* 如果 p 为空,则完成 */

C ตัวชี้ละเอียด

ใน C มีตัวชี้หลายแนวคิดที่เกี่ยวข้องกับการที่ง่ายมาก แต่สิ่งที่สำคัญมาก ด้านล่างมีบางแนวคิดที่สำคัญที่เกี่ยวข้องกับตัวชี้โปรแกรมเมอร์ C ต้องมีความชัดเจน:

概念描述
指针的算术运算 可以对指针进行四种算术运算:++、--、+、-
指针数组 可以定义用来存储指针的数组。
指向指针的指针 C 允许指向指针的指针。
传递指针给函数 通过引用或地址传递参数,使传递的参数在调用函数中被改变。
从函数返回指针 C 允许函数返回指针到局部变量、静态变量和动态内存分配。