Cấu trúc C (cấu trúc)
cấu trúc
Cấu trúc (còn gọi là cấu trúc) là một cách để nhóm một số biến liên quan vào một nơi. Mỗi biến trong cấu trúc được biết đến như một thành viên của cấu trúc.
Không giống như mảng , cấu trúc có thể chứa nhiều kiểu dữ liệu khác nhau (int, float, char, v.v.).
Tạo một cấu trúc
Bạn có thể tạo một cấu trúc bằng cách sử dụng từ khóa struct
và khai báo từng thành viên của nó bên trong dấu ngoặc nhọn:
struct MyStructure { // Structure declaration
int myNum; // Member (int
variable)
char myLetter; // Member (char variable)
};
// End the structure with a semicolon
Để truy cập vào cấu trúc, bạn phải tạo một biến của nó.
Sử dụng từ khóa struct
bên trong phương thức main()
, theo sau là tên của cấu trúc và sau đó là tên của biến cấu trúc:
Tạo một biến cấu trúc có tên "s1":
struct myStructure {
int myNum;
char myLetter;
};
int main()
{
struct myStructure s1;
return 0;
}
Thành viên cấu trúc truy cập
Để truy cập các thành viên của cấu trúc, hãy sử dụng cú pháp dấu chấm ( .
):
Ví dụ
// Create a structure called myStructure
struct myStructure {
int myNum;
char myLetter;
};
int main() {
// Create a structure variable
of myStructure called s1
struct myStructure s1;
// Assign values to members of s1
s1.myNum = 13;
s1.myLetter = 'B';
// Print values
printf("My
number: %d\n", s1.myNum);
printf("My letter: %c\n", s1.myLetter);
return 0;
}
Hãy tự mình thử »Bây giờ bạn có thể dễ dàng tạo nhiều biến cấu trúc với các giá trị khác nhau chỉ bằng một cấu trúc:
Ví dụ
// Create different struct variables
struct myStructure s1;
struct myStructure s2;
// Assign values to different struct variables
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
Hãy tự mình thử »Còn các chuỗi trong cấu trúc thì sao?
Hãy nhớ rằng các chuỗi trong C thực sự là một mảng các ký tự và thật không may, bạn không thể gán giá trị cho một mảng như thế này:
Ví dụ
struct myStructure {
int myNum;
char myLetter;
char myString[30]; //
String
};
int main() {
struct myStructure s1;
// Trying to assign a value to the string
s1.myString = "Some text";
// Trying to print the value
printf("My string: %s",
s1.myString);
return 0;
}
Sẽ xảy ra lỗi:
prog.c:12:15: error: assignment to expression with array type
Tuy nhiên, có một giải pháp cho việc này! Bạn có thể sử dụng hàm strcpy()
và gán giá trị cho s1.myString
như thế này:
Ví dụ
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};
int main() {
struct myStructure s1;
// Assign a value to the string using
the strcpy function
strcpy(s1.myString, "Some text");
// Print the value
printf("My string: %s", s1.myString);
return 0;
}
Kết quả:
My string: Some text
Cú pháp đơn giản hơn
Bạn cũng có thể gán giá trị cho các thành phần của biến cấu trúc tại thời điểm khai báo, trên một dòng.
Chỉ cần chèn các giá trị vào danh sách được phân tách bằng dấu phẩy bên trong dấu ngoặc nhọn {}
. Lưu ý rằng bạn không phải sử dụng hàm strcpy()
cho các giá trị chuỗi bằng kỹ thuật này:
Ví dụ
// Create a structure
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// Create a structure variable and assign values to it
struct myStructure s1 = {13,
'B', "Some text"};
// Print values
printf("%d %c %s", s1.myNum, s1.myLetter,
s1.myString);
return 0;
}
Hãy tự mình thử »Lưu ý: Thứ tự của các giá trị được chèn phải khớp với thứ tự của các loại biến được khai báo trong cấu trúc (13 cho int, 'B' cho char, v.v.).
Sao chép cấu trúc
Bạn cũng có thể gán một cấu trúc này cho một cấu trúc khác.
Trong ví dụ sau, các giá trị của s1 được sao chép sang s2:
Ví dụ
struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;
s2 = s1;
Hãy tự mình thử »Sửa đổi giá trị
Nếu bạn muốn thay đổi/sửa đổi một giá trị, bạn có thể sử dụng cú pháp dấu chấm ( .
).
Và để sửa đổi một giá trị chuỗi, hàm strcpy()
lại hữu ích:
Ví dụ
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
// Create a structure variable and assign values to it
struct
myStructure s1 = {13, 'B', "Some text"};
// Modify values
s1.myNum = 30;
s1.myLetter = 'C';
strcpy(s1.myString,
"Something else");
// Print values
printf("%d %c
%s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
Hãy tự mình thử »Việc sửa đổi các giá trị đặc biệt hữu ích khi bạn sao chép các giá trị cấu trúc:
Ví dụ
// Create a structure variable and assign values to it
struct
myStructure s1 = {13, 'B', "Some text"};
// Create another structure
variable
struct myStructure s2;
// Copy s1 values to s2
s2 =
s1;
// Change s2 values
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString,
"Something else");
// Print values
printf("%d %c
%s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c
%s\n", s2.myNum, s2.myLetter, s2.myString);
Hãy tự mình thử »Được rồi, cấu trúc có ích như thế nào?
Hãy tưởng tượng bạn phải viết một chương trình để lưu trữ các thông tin khác nhau về Ô tô, chẳng hạn như nhãn hiệu, mẫu mã và năm sản xuất. Điều tuyệt vời về cấu trúc là bạn có thể tạo một "Mẫu ô tô" duy nhất và sử dụng nó cho mọi ô tô bạn tạo ra. Xem bên dưới để biết ví dụ thực tế.
Ví dụ thực tế
Sử dụng cấu trúc để lưu trữ thông tin khác nhau về Ô tô:
Ví dụ
struct Car {
char brand[50];
char model[50];
int
year;
};
int main() {
struct Car car1 = {"BMW", "X5",
1999};
struct Car car2 = {"Ford", "Mustang", 1969};
struct
Car car3 = {"Toyota", "Corolla", 2011};
printf("%s %s %d\n",
car1.brand, car1.model, car1.year);
printf("%s %s %d\n", car2.brand,
car2.model, car2.year);
printf("%s %s %d\n", car3.brand, car3.model,
car3.year);
return 0;
}
Hãy tự mình thử »