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 ชี้เป็นที่อยู่ของการแสดงตัวเลข ดังนั้นคุณสามารถดำเนินการทางคณิตศาสตร์ในการชี้ ชี้สามารถดำเนินการทางคณิตศาสตร์ที่สี่: +, -, +, -

PTR สมมติว่าเป็นตัวชี้ไปยังที่อยู่ของตัวชี้จำนวนเต็ม 1000 เป็น 32 บิตจำนวนเต็มให้เลขคณิตชี้เพื่อดำเนินการต่อไปนี้:

ptr++

หลังจากการดำเนินการดำเนินการดังกล่าวจุดPTR ไปยังตำแหน่งที่ 1004 เพราะ PTR แต่ละเวลาเพิ่มเติมก็จะชี้ไปที่ตำแหน่งจำนวนเต็มถัดไปที่ตำแหน่งปัจจุบันย้ายกลับสี่ไบต์ในกรณีของการดำเนินการนี้จะไม่ส่งผลกระทบต่อมูลค่าที่แท้จริงของสถานที่ตั้งของหน่วยความจำที่ย้ายตัวชี้ไปยังตำแหน่งของหน่วยความจำต่อไป ถ้าPTR จุดไปยังที่อยู่ของ 1000 ตัวอักษรที่ดำเนินการดังกล่าวจะทำให้เกิดการชี้ไปยังตำแหน่งของ 1001 เพราะตำแหน่งตัวอักษรถัดไป 1001

การเพิ่มตัวชี้

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

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中的数组地址 */
   ptr = var;
   for ( i = 0; i < MAX; i++)
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr++;
   }
   return 0;
}

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

Address of var[0] = bf882b30
Value of var[0] = 10
Address of var[1] = bf882b34
Value of var[1] = 100
Address of var[2] = bf882b38
Value of var[2] = 200

พร่องตัวชี้

ในทำนองเดียวกันชี้เป็น decremented และลบจำนวนไบต์ที่มีค่าของชนิดข้อมูลดังต่อไปนี้:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中最后一个元素的地址 */
   ptr = &var[MAX-1];
   for ( i = MAX; i > 0; i--)
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr--;
   }
   return 0;
}

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

Address of var[3] = bfedbcd8
Value of var[3] = 200
Address of var[2] = bfedbcd4
Value of var[2] = 100
Address of var[1] = bfedbcd0
Value of var[1] = 10

เปรียบเทียบตัวชี้

ชี้สามารถนำมาใช้เพื่อเปรียบเทียบความสัมพันธ์ระหว่างผู้ประกอบการเช่น == <และ> หาก P1 และ P2 จุดสองตัวแปรที่เกี่ยวข้องเช่นกับอาร์เรย์ขององค์ประกอบที่แตกต่างกันก็สามารถขนาดของ P1 และ P2 เมื่อเทียบ

ขั้นตอนต่อไปจะปรับเปลี่ยนตัวอย่างข้างต้นเป็นเวลานานเป็นที่อยู่ขององค์ประกอบสุดท้ายของตัวชี้ตัวแปรที่อยู่ของอาร์เรย์มีค่าน้อยกว่าหรือเท่ากับ & var [MAX - 1] ใส่ตัวแปรตัวชี้จะเพิ่มขึ้น:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中第一个元素的地址 */
   ptr = var;
   i = 0;
   while ( ptr <= &var[MAX - 1] )
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 指向上一个位置 */
      ptr++;
      i++;
   }
   return 0;
}

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

Address of var[0] = bfdbcb20
Value of var[0] = 10
Address of var[1] = bfdbcb24
Value of var[1] = 100
Address of var[2] = bfdbcb28
Value of var[2] = 200

C ตัวชี้ C ตัวชี้