© Le Trung Thang Nov - 2010
Chú ý:
Một con trỏ (hay biến nói chung) luôn phải có kiểu và giá trị (hay nội dung) gắn liền với nó. Ở qui tắc đầu tiên trong 4 qui tắc trên, ta chỉ nói đến kiểu của A. Về giá trị, thì cách tính giữa mảng A và con trỏ thông thường sẽ khác nhau:
- Nếu A là c/trỏ thông thường cấp n (n >=2 ), thì giá trị của *A sẽ là giá trị các ô nhớ (thường là 4byte) mà A trỏ tới.
- Nếu A là mảng cấp n (n >=2 ), thì giá trị của *A sẽ là địa chỉ của những ô nhớ mà A trỏ tới. (như ví dụ trên).
Xem ví dụ 1 sau:
The best tools for embedded system:
Một con trỏ (hay biến nói chung) luôn phải có kiểu và giá trị (hay nội dung) gắn liền với nó. Ở qui tắc đầu tiên trong 4 qui tắc trên, ta chỉ nói đến kiểu của A. Về giá trị, thì cách tính giữa mảng A và con trỏ thông thường sẽ khác nhau:
- Nếu A là c/trỏ thông thường cấp n (n >=2 ), thì giá trị của *A sẽ là giá trị các ô nhớ (thường là 4byte) mà A trỏ tới.
- Nếu A là mảng cấp n (n >=2 ), thì giá trị của *A sẽ là địa chỉ của những ô nhớ mà A trỏ tới. (như ví dụ trên).
Xem ví dụ 1 sau:
int main() // ví dụ 1 { int* a ; int* b ; int **pointer ; // pointer tro toi kieu int, *pointer tro toi kieu char. // Tuy vậy,ko hề tồn tại biến nào là *pointer cả, đây chỉ là cách nói hình thức, // trong bộ nhớ chỉ có biến pointer. int Array[3][3] = {// col 1 2 3 {0,1,2},//row 1 {3,4,5},//row 2 {6,7,8},//row 3 }; pointer = (int**)Array;//ve syntax thi pointer va Array khac kieu, nen phai ép kiểu. a = pointer[1]; // pointer tăng mỗi lần 4 byte, vì pointer trỏ tới kiểu dữ liệu //4 byte (int), còn *pointer trỏ tới kiểu dữ liệu 1 byte (char). // Để ý là: pointer[1] = (*(pointer+1)) b = *(Array+1) ; // = Array[1] printf("Pointer 2D: a = %d, b = %d, &Array = %d, &Array[0] = %d, &Array[1] = %d,&Array[1][0]=%d\n", a,b,Array,&Array[0],Array[1],&Array[1][0]); getchar(); return 0; // Để ý sự khác nhau giữa *(Array+1) và *(pointer+1) }
Output: Pointer 2D: a = 1, b = 2293532, & Array = 2293520, &Array[0] = 2293520, & Array[1] = 2293532, &Array[1][0]=2293532
The best tools for embedded system:
No comments:
Post a Comment