01/10/2018, 12:15

Ý nghĩa pp[2].x

em có đoạn code sau

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a = 2, b = 3;

struct point {

   int x;

   int y;

} *pp, parr[ ] = { {12, 3}, {10, 7}, {8, 11}, {6, 15}, {4, 19} }; /* Note: tableau de 5 éléments

*/

pp = &parr[2];
printf("%d .... %d 
",pp->x,pp->y);
a = pp[2].x;
printf("%d 
",a);
}

Mình không hiểu pp[2].x là giá ttrị gì vậy

Traullu viết 14:27 ngày 01/10/2018

đây là kiểu struct, khi bạn khai báo như vậy tức là parr là một mảng gồm 5 phần tử kiểu point, mỗi phần tử có 2 thành phần x và y.
thường thì không nên khai báo như vậy sẽ dễ dẫn đến hiểu nhầm. bạn nên xem lại phần kiểu dữ liệu cấu trúc.

Thanh Hải Đinh viết 14:30 ngày 01/10/2018

cái này câu trắc nghiệm bài kiểm tra bạn ạ, bình thường không ai khai báo như vậy cả

X viết 14:28 ngày 01/10/2018

cái này câu trắc nghiệm bài kiểm tra bạn ạ, bình thường không ai khai báo như vậy cả

Một bài toán có thể có nhiều cách giải, cũng là khai báo nhưng có nhiều cách khai báo khác nhau. Miễn sao chương trình chạy được và ra đúng yêu cầu. Nếu bạn chưa từng khai báo như vậy thì đây là để bạn học thêm 1 cách khác. Tóm lại thì những gì bạn không biết thì không có nghĩa là nó không tồn tại.
P/s: Đây là topic hỏi bài trong lúc kiểm tra?

Thanh Hải Đinh viết 14:25 ngày 01/10/2018

Không bạn, kiểm tra rồi, mình ôn tập lại thôi

Traullu viết 14:20 ngày 01/10/2018

mình thấy bạn này cần xem lại thái độ khi trao đổi với người khác, thứ nhất chưa kể đến vấn đề tuổi tác( ở đây cũng có khá nhiều vị tiền bối) thứ hai về cách mà bạn nói, nếu biết rồi thì bạn lên đây hỏi làm gì? sau khi được giải đáp thì lại coi như là mình biết hết rồi -_-

Thanh Hải Đinh viết 14:31 ngày 01/10/2018

Mình hỏi pp[2].x nó ý nghĩa thế nào, bạn trả lời mình phần khai báo của pp và parr
Compile pp[2].x nó ra a=4. Mình không hiểu sao bằng 4, chứ mình ko hỏi cách khai báo của pp và parr…
Mình trao đổi bình thường, mình đã có nói là mình trả lời được câu hỏi đâu…
p/s: câu hỏi bài code này là giá trị in ra của a là bao nhiêu ( ĐA là 4) , mình không hiểu sao lại là 4

Trần Hoàn viết 14:29 ngày 01/10/2018

Đây nhé:
Mảng là một cấu trúc dữ liệu, bao gồm nhiều ô nhớ liên tiếp cạnh nhau. Địa chỉ của mảng cũng là địa chỉ ô nhớ đầu tiên trong mảng (và là ô nhớ ứng với phần tử đầu tiên)

pp = &parr[2];

Tức là pp có địa chỉ là địa chỉ của parr[2]
Vì địa chỉ của mảng cũng là địa chỉ của ô nhớ đầu tiên, nên &pp[0] == &parr[2]
Vì mảng là các ô nhớ liên tiếp cạnh nhau và &pp[0] == &parr[2] nên &pp[n] == &parr[n+2]
=> &pp[2] == &parr[4]

pp thì có kiểu dữ liệu là point*, parr thì có kiểu dữ liệu là point[], mà mảng thực chất lại cũng là con trỏ, coi như cũng là point*. Có &pp[2] == &parr[4] => pp[2] == parr[4] (== { 4, 19 })

viết 14:29 ngày 01/10/2018

pp là con trỏ tới phần tử thứ 3 trong mảng arr, pp[2] là phần tử thứ 3 tính từ pp, nghĩa là phần tử thứ 5 tính từ arr, nên nó là arr[4], mà arr[4] là {4, 19}, nên arr[4].x là 4.

arr:  arr[0]  arr[1]  arr[2]  arr[3]  arr[4]
                      ^                 |
                  gán pp = &arr[2]      |
                                        |
                   pp: pp[0]   pp[1]   pp[2]

suy ra pp[2] === arr[4]
Bài liên quan
0