SlideShare a Scribd company logo
C	căn	bản
Đơn giản mà đẹp
cuong@techmaster.vn
Ngôn ngữ C
• Năm sinh 1972
• Bố: Dennis Ritchie, Me: Bell Labs
• Lần nâng cấp gần đây C11, 2011
• Đa nền tảng: Linux, Unix, Mac, Windows
• Mã nguồn: *.c, *.h
Basic C programming
Ưu điểm
• Cú pháp đơn giản
• ~ 60% Javascript,
C++, Java…
• Thực thi nhanh
• Tiết kiệm bộ nhớ
• Đa nền tảng
• Thích hợp để học
thuật toán
Nhược điểm
• Thiếu tính năng mạnh
– Hướng đối tượng
– Chồng toán tử
– Generic programming
– Functional programming
Top 3 ngôn ngữ phổ biến
Ứng dụng nổi tiếng viết bằng C
• Hầu hết các hệ điều hành
• Các phần mềm máy chủ
http://www.mycplus.com/featured-articles/top-10-
applications-written-in-c-cplusplus/
Lợi ích khi học C
• Nhập cuộc đơn giản, cú pháp tối giản
• Dễ dàng chuyển đổi sang ngôn ngữ khác
• Hiểu hệ điều hành quản lý bộ nhớ
• Tính năng ít, phải tự viết nhiều à
hiểu sâu
• Thạo C đi xin việc được
C awesome
• https://notabug.org/koz.ross/awes
ome-c
• https://github.com/aleksandar-
todorovic/awesome-c
Học C trong 2 tiếng
#include <stdio.h>
int main() {
printf("Hello, World!n");
return 0;
}
Nhúng	thư	viện	có	sẵn
Hàm	chính	luôn	chạy	đầu	tiên
In	ra	terminal	hoặc	console
Công cụ soạn mã IDE Windows Linux Mac
Visual Studio $ ✔
Clion $ ✔ ✔ ✔
XCode ✔
CodeBlocks ✔
DevC ✔
NetBeans ✔ ✔ ✔
Eclipse ✔ ✔ ✔
Sublime Text $ ✔ ✔ ✔
Vim editor soạn thảo C trực tiếp trong terminal
printf – in ra màn hình
• (formatstring, param1, param2, param3…);
• %d decimal number
• %c character
• %s string
• %f float
• %p pointer
• n new line
Kết quả in ra là gì?
#include <stdio.h>
main() {
int i = 0;
for (i = 0; i < 10; i++) {
printf("Line %dn", i);
}
return 0;
}
Trình biên dịch - compiler
• Mac
– make
• Linux, Windows
– gcc, g++
https://www.youtube.com/watch?v=B-ru-
q_Bm2I
Compiler biên dịch
IDE
• Ứng dụng soạn thảo
code
• Giao diện đồ hoạ:
highlight syntax…
• Quản lý nhiều file
mã nguồn, dự án
• Tích hợp hoặc gọi
đến compiler
Compiler
• Trình biên dịch mã
nguồn ra file chạy
• Có nhiều option:
– Debug
– Release
• Chạy trên dòng lệnh,
không có giao diện
Cú pháp
• #include <stdio.h>
• #include "MyHeader.h"
• Chú thích 1 dòng //something
• Chú thích khối /* line 1
line 2 */
Data	
types
Numeric
Interger Floating
char	/	c-
string
char C	String
void Array Struct Pointer Derived
bool
Kiểu dữ liệu số nguyên
sizeof Value	range
char 1	byte -128	to	127 .	Or	0	to	255
signed	char 1	byte -128	to	127
unsigned	char 1	byte 0	to	255
int 2	or	4	bytes -32,768	to	32,767	or	-2,147,483,648	to	2,147,483,647
unsigned int 2	or	4	bytes 0	to	65,535	or	0	to	4,294,967,295
short 2	bytes -32,768	to	32,767
unsigned short 2 bytes 0	to	65,535
long 8	bytes -2^31+1	to	+2^31-1
unsigned long 8	bytes 0 to	2^32-1
long	long 8	or	16	bytes -2^63+1	to	+2^63-1
#include <stdio.h>
void main() {
int a = 10;
float pi = 3.14158;
char c = 32;
long long bigLong = 100;
long largeInt = 10000;
double bigFloat = 1.168;
printf("size %lu", sizeof(bigLong));
}
CPU 32 bit khả năng đánh địa chỉ tối đa 2^32
Dấu phẩy động –floating point types
Type Size Value range Precision
float 4 bytes 1.2E-38 to
3.4E+38
6 decimal
places
double 8 bytes 2.3E-308 to
1.7E+308
15 decimal
places
long double 10 bytes 3.4E-4932 to
1.1E+4932
19 decimal
places
Kiểu void
• Không có gì, không tồn tại
• Không dùng void khai báo biến
• Dùng void * khai báo con trỏ kiểu
không xác định
• Hàm không trả về giá trị
void doSomething() {
printf("Return nothing from this func");
}
void* a;
Sử dụng void
#include <stdio.h>
void doSomething() {
printf("Do something returns nothing");
}
main() {
//void a; //Cannot compile
int x = 10;
void* b = &x;
printf("%dn", *(int*)b);
doSomething();
return 0;
}
Ký tự - char
• Ký tự trong C chiếm 1 byte, không
hỗ trợ unicode
char c ='C';
char space = 32;
char six = '0' + 6;
Xem quy chuẩn bẳng mã ASCII
https://vi.wikipedia.org/wiki/ASCII
In tuần tự a-z
#include <stdio.h>
main() {
char c;
for (c = 'a'; c < 'z'; c++) {
printf("%cn", c);
}
return 0;
}
Con trỏ - Pointer
Con trỏ - Pointer
• Nhiều ngôn ngữ lập trình không
cần con trỏ: Visual Basic, C#,
Swift, Java, Javascript, Scala
• Tại sao C vẫn dùng con trỏ?
• Liệu con trỏ có thực sự cần thiết
Tại sao C dùng con trỏ ?
• C rất sát với hệ điều hành
• Quản lý bộ nhớ thủ công – nhanh
nhưng rủi ro
• Con trỏ để tham chiếu đến các
biến trong bộ nhớ
• Cấp phát – giải phóng bộ nhớ
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
printf("Value p points to %dn", *p);
printf("Address that p points at %pn", p);
printf("Address of p itself in mem %pn", &p);
a = 11;
printf("New value p points to %dn", *p);
return 0;
}
Value p points to 10
Address of p points to 0x7fff5c049b68
Address of actual p 0x7fff5c049b60
New value p points to 11
a =	100x7fff5c049b68
0x7fff5c049b60 p=1597348712
Value p points to 10
Address of p points to 0x7fff5c049b68
Address of actual p 0x7fff5c049b60
New value p points to 11
Con trỏ có kích thước không?
• Ở hệ điều hành 32bit, nó chiếm 4
bytes, ở hệ 64bit, nó chiếm 8
bytes
• 32 bits = 4 bytes, dải vùng nhớ
khoảng 4GB
• 64 bits = 8 bytes lớn gấp 2^32
lần
1
128 64 32 16 8 4 2 1
1 1 1 1 1 1 1
Khả năng đánh địa chỉ hệ 64 bit
You will never, ever be able to assemble a system that has
264 bytes (16 exibytes) of physical RAM.
Second, just because an architecture uses 64-bit pointers,
doesn't mean that all the bits of those pointers are actually
used. Notably, current x86-64 CPUs (aka AMD64 and Intel's
current 64-bit chips) actually use 48-bit address lines
(AMD64) and 42-bit address lines (Intel)
(see http://en.wikipedia.org/wiki/X86_64#Virtual_address_space
_details ), theoretically allowing 256 terabytes of physical
RAM.
Trích
https://superuser.com/questions/168114/how-much-memory-can-a-
64bit-machine-address-at-a-time/168120
Mảng 1 chiều, 2 chiều
Mảng - Array
• Fixed size array
• Memory allocated array
int scores[] = {1, 2, 3};
char sizes[] = {'S', 'M', 'L'};
char* workdays[] = {"Monday", "Tuesday",
"Wednesday", "Thursday", "Friday"};
int *intArray = malloc(10* sizeof(int));
intArray[0] = 100;
free(intArray);
Đặc điểm mảng
• Phần tử đầu tiên đánh vị trí 0
• Không thay đổi được kích thước
sau khi khai báo
• Các phần tử nằm liên tiếp nhau
#include <stdio.h>
#include <stdlib.h>
int main() {
const int N = 10;
int *intArray = malloc(N * sizeof(int));
free(intArray);
int i = 0;
while (i < N) {
intArray[i] = i;
i++;
}
free(intArray);
return 0;
}
int int2D[3][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d", int2D[i][j]);
if (j < 2) {
printf(", ");
} else {
printf("n");
}
}
}
Mảng 2 chiều
1, 2, 3
4, 5, 6
7, 8, 9
In ra
C string, mảng ký tự kiểu char
H e l l o W o r l d 0
p
Terminated
character,
value = 0;
0 1 2 3 4 5 6 7 8 9 10
p[2]
char* p ="Hello World";
strlen(p) == 11
Thư viện <string.h>
• strlen trả về số ký tự
• strcpy copy từ mảng này sang mảng kia
• memset đặt 1 ký tự N lần vào mảng
• strcmp so sánh 2 chuỗi
https://www.tutorialspoint.com/c_standard_libr
ary/string_h.htm
#include <stdio.h>
#include <string.h>
int main() {
char *p = "Hello World";
char str[] = "Hello World";
char chuoi[100];
strcpy(chuoi, "Hello World");
printf("%sn", chuoi);
int val = strcmp(p, chuoi);
if (val == 0) {
printf("Giong nhaun");
} else {
printf("Khac nhaun");
}
memset(chuoi, 'A', 11);
printf("%sn", chuoi);
return 0;
}
Kiểu dữ liệu khác trong C
Boolean: đúng hoặc sai
• C không có kiểu nguyên thuỷ
boolean
• Dùng kiểu char lấy giá trị 0 hoặc
1 để thay thế
• Hoặc dùng thư viện stdbool.h
#include <stdbool.h>
int main() {
bool continueLoop = true;
int i = 0;
while (continueLoop) {
if (i > 10) continueLoop = false;
i++;
}
return 0;
}
struct
• Gom nhiều biến liên quan thành
một cụm
• Có thể định nghĩa kiểu để tái sử
dụng
int main() {
struct Book {
char *title;
char *author;
int ISBN;
} book;
struct Book b;
b.title = "The C Programming Language";
b.author = "Brian W Kernighan & Dennis M. Ritchie";
b.ISBN = 0131101633;
return 0;
}
typedef
typedef struct {
char *title;
char *author;
int ISBN;
} Book;
struct Book {
char *title;
char *author;
int ISBN;
};
Ngắn gọn hơn
typedef đặt tên mới cho kiểu
#include <stdio.h>
typedef unsigned char BYTE;
typedef unsigned char BOOL;
#define true 1
#define false 0
int main() {
BYTE rock = 125;
BOOL isTrue = true;
if (isTrue) {
printf("%d", rock);
}
return 0;
}
typedef đặt tên kiểu mới
#define đặt tên giá trị
Hỏi đáp về C
C có hỗ trợ hướng đối tượng?
• Không. C++ hỗ trợ hướng đối tượng
• C++ là ngôn ngữ phát triển lên từ
C
C-99, C-11 là gì?
• C-99 là tiêu chuẩn C được thống
nhất năm 1999
• C—11 là tiêu chuẩn C được thống
nhất năm 2011
File binary biên dịch ở Windows có chạy được trên Linux không?
• Không
• Mã nguồn C là portable, có thể
biên dịch lại trên các hệ điều
hành khác nhau
• Nhưng file binary biên dịch không
portable

More Related Content

PDF
Control structure in C
PDF
C đến C++ phần 1
DOC
Lập trình c++ có lời giải 2
PDF
Stl string
DOC
Lap trinh c++ có lời giải 1
PDF
Tut4 solution
PPT
Nmlt c09 chuoi_kytu
PPT
Nmlt c05 cau_lenhlap
Control structure in C
C đến C++ phần 1
Lập trình c++ có lời giải 2
Stl string
Lap trinh c++ có lời giải 1
Tut4 solution
Nmlt c09 chuoi_kytu
Nmlt c05 cau_lenhlap

What's hot (18)

PDF
Tut6 solution
DOCX
Hướng dẫn làm bt về chuỗi.doc
PDF
Tut5 solution
PDF
Lect09 string
PDF
Hàm và Chuỗi
PDF
Ktlt lab full
PPT
Nmlt c06 ham
PDF
String c++
PDF
Huong dan su dung va debug voi dev c++
PPT
Nmlt c11 con_trocoban-
DOC
Lap trinh c++ có lời giải 3
PDF
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
PDF
PPT
Ctdl C02
PPT
Nmlt c11 con_trocoban
PPT
Ctdl C05
PDF
Bai tap oop c++
PDF
Giao trinh bai tap c va c++
Tut6 solution
Hướng dẫn làm bt về chuỗi.doc
Tut5 solution
Lect09 string
Hàm và Chuỗi
Ktlt lab full
Nmlt c06 ham
String c++
Huong dan su dung va debug voi dev c++
Nmlt c11 con_trocoban-
Lap trinh c++ có lời giải 3
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Ctdl C02
Nmlt c11 con_trocoban
Ctdl C05
Bai tap oop c++
Giao trinh bai tap c va c++
Ad

Similar to Basic C programming (20)

PDF
Lập trình C cho VĐK 8051
PDF
Phan 2 chuong 1-2
PDF
thu ha
PDF
Ngon ngu c theo chuan ansi
PDF
Lập trình c căn bản
PDF
C cho 8051
PPS
CáC KiểU Dữ LiệU
PDF
Phần 2: Giới thiệu ngôn ngữ lập trình C
PPTX
FPLSP25G29Bai thuc hanh tin hoccs 2 LCAS0401.pptx.pptx
PDF
C2 basics of_c_and_cpp
PDF
C2 basics of_c_and_cpp
PDF
Chuong 1@ngon ngu c
PPT
1 Gioi Thieu Chung
PDF
slide 8051
PPT
4 Pointer String Struct
PDF
Chuong 2@ngon ngu c
DOCX
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
PPT
Phan2 chuong1 gioithieu_c
PPT
Chapter 2
PPT
Thdc3 Lap Trinh C
Lập trình C cho VĐK 8051
Phan 2 chuong 1-2
thu ha
Ngon ngu c theo chuan ansi
Lập trình c căn bản
C cho 8051
CáC KiểU Dữ LiệU
Phần 2: Giới thiệu ngôn ngữ lập trình C
FPLSP25G29Bai thuc hanh tin hoccs 2 LCAS0401.pptx.pptx
C2 basics of_c_and_cpp
C2 basics of_c_and_cpp
Chuong 1@ngon ngu c
1 Gioi Thieu Chung
slide 8051
4 Pointer String Struct
Chuong 2@ngon ngu c
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Phan2 chuong1 gioithieu_c
Chapter 2
Thdc3 Lap Trinh C
Ad

More from TechMaster Vietnam (20)

PDF
Neural Network from Scratch
PPTX
Go micro framework to build microservices
PPTX
Flutter vs React Native 2018
PDF
Authentication and Authorization
PDF
Postgresql security
PDF
Knex Postgresql Migration
PDF
Postgresql các vấn đề thực tế
PPTX
Arrowjs.io
PPTX
Minimum Viable Products
PPTX
Chia sẻ kinh nghiệm giảng dạy CNTT
PPTX
Cơ sở dữ liệu postgres
PDF
Node.js căn bản
PDF
Tìm nền tảng lập trình cho 5 năm tới
PDF
iOS Master - Detail & TabBar
PDF
Phalcon căn bản
PDF
Cấu hình Postgresql căn bản trong 20 phút
PDF
Phalcon introduction
PPTX
Slide that wins
PPTX
Manage your project differently
PPTX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Neural Network from Scratch
Go micro framework to build microservices
Flutter vs React Native 2018
Authentication and Authorization
Postgresql security
Knex Postgresql Migration
Postgresql các vấn đề thực tế
Arrowjs.io
Minimum Viable Products
Chia sẻ kinh nghiệm giảng dạy CNTT
Cơ sở dữ liệu postgres
Node.js căn bản
Tìm nền tảng lập trình cho 5 năm tới
iOS Master - Detail & TabBar
Phalcon căn bản
Cấu hình Postgresql căn bản trong 20 phút
Phalcon introduction
Slide that wins
Manage your project differently
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX

Basic C programming

  • 1. C căn bản Đơn giản mà đẹp cuong@techmaster.vn
  • 2. Ngôn ngữ C • Năm sinh 1972 • Bố: Dennis Ritchie, Me: Bell Labs • Lần nâng cấp gần đây C11, 2011 • Đa nền tảng: Linux, Unix, Mac, Windows • Mã nguồn: *.c, *.h
  • 4. Ưu điểm • Cú pháp đơn giản • ~ 60% Javascript, C++, Java… • Thực thi nhanh • Tiết kiệm bộ nhớ • Đa nền tảng • Thích hợp để học thuật toán Nhược điểm • Thiếu tính năng mạnh – Hướng đối tượng – Chồng toán tử – Generic programming – Functional programming
  • 5. Top 3 ngôn ngữ phổ biến
  • 6. Ứng dụng nổi tiếng viết bằng C • Hầu hết các hệ điều hành • Các phần mềm máy chủ http://www.mycplus.com/featured-articles/top-10- applications-written-in-c-cplusplus/
  • 7. Lợi ích khi học C • Nhập cuộc đơn giản, cú pháp tối giản • Dễ dàng chuyển đổi sang ngôn ngữ khác • Hiểu hệ điều hành quản lý bộ nhớ • Tính năng ít, phải tự viết nhiều à hiểu sâu • Thạo C đi xin việc được
  • 8. C awesome • https://notabug.org/koz.ross/awes ome-c • https://github.com/aleksandar- todorovic/awesome-c
  • 9. Học C trong 2 tiếng
  • 10. #include <stdio.h> int main() { printf("Hello, World!n"); return 0; } Nhúng thư viện có sẵn Hàm chính luôn chạy đầu tiên In ra terminal hoặc console
  • 11. Công cụ soạn mã IDE Windows Linux Mac Visual Studio $ ✔ Clion $ ✔ ✔ ✔ XCode ✔ CodeBlocks ✔ DevC ✔ NetBeans ✔ ✔ ✔ Eclipse ✔ ✔ ✔ Sublime Text $ ✔ ✔ ✔
  • 12. Vim editor soạn thảo C trực tiếp trong terminal
  • 13. printf – in ra màn hình • (formatstring, param1, param2, param3…); • %d decimal number • %c character • %s string • %f float • %p pointer • n new line
  • 14. Kết quả in ra là gì? #include <stdio.h> main() { int i = 0; for (i = 0; i < 10; i++) { printf("Line %dn", i); } return 0; }
  • 15. Trình biên dịch - compiler • Mac – make • Linux, Windows – gcc, g++ https://www.youtube.com/watch?v=B-ru- q_Bm2I
  • 17. IDE • Ứng dụng soạn thảo code • Giao diện đồ hoạ: highlight syntax… • Quản lý nhiều file mã nguồn, dự án • Tích hợp hoặc gọi đến compiler Compiler • Trình biên dịch mã nguồn ra file chạy • Có nhiều option: – Debug – Release • Chạy trên dòng lệnh, không có giao diện
  • 18. Cú pháp • #include <stdio.h> • #include "MyHeader.h" • Chú thích 1 dòng //something • Chú thích khối /* line 1 line 2 */
  • 20. Kiểu dữ liệu số nguyên sizeof Value range char 1 byte -128 to 127 . Or 0 to 255 signed char 1 byte -128 to 127 unsigned char 1 byte 0 to 255 int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295 short 2 bytes -32,768 to 32,767 unsigned short 2 bytes 0 to 65,535 long 8 bytes -2^31+1 to +2^31-1 unsigned long 8 bytes 0 to 2^32-1 long long 8 or 16 bytes -2^63+1 to +2^63-1
  • 21. #include <stdio.h> void main() { int a = 10; float pi = 3.14158; char c = 32; long long bigLong = 100; long largeInt = 10000; double bigFloat = 1.168; printf("size %lu", sizeof(bigLong)); }
  • 22. CPU 32 bit khả năng đánh địa chỉ tối đa 2^32
  • 23. Dấu phẩy động –floating point types Type Size Value range Precision float 4 bytes 1.2E-38 to 3.4E+38 6 decimal places double 8 bytes 2.3E-308 to 1.7E+308 15 decimal places long double 10 bytes 3.4E-4932 to 1.1E+4932 19 decimal places
  • 24. Kiểu void • Không có gì, không tồn tại • Không dùng void khai báo biến • Dùng void * khai báo con trỏ kiểu không xác định • Hàm không trả về giá trị void doSomething() { printf("Return nothing from this func"); } void* a;
  • 25. Sử dụng void #include <stdio.h> void doSomething() { printf("Do something returns nothing"); } main() { //void a; //Cannot compile int x = 10; void* b = &x; printf("%dn", *(int*)b); doSomething(); return 0; }
  • 26. Ký tự - char • Ký tự trong C chiếm 1 byte, không hỗ trợ unicode char c ='C'; char space = 32; char six = '0' + 6; Xem quy chuẩn bẳng mã ASCII https://vi.wikipedia.org/wiki/ASCII
  • 27. In tuần tự a-z #include <stdio.h> main() { char c; for (c = 'a'; c < 'z'; c++) { printf("%cn", c); } return 0; }
  • 28. Con trỏ - Pointer
  • 29. Con trỏ - Pointer • Nhiều ngôn ngữ lập trình không cần con trỏ: Visual Basic, C#, Swift, Java, Javascript, Scala • Tại sao C vẫn dùng con trỏ? • Liệu con trỏ có thực sự cần thiết
  • 30. Tại sao C dùng con trỏ ? • C rất sát với hệ điều hành • Quản lý bộ nhớ thủ công – nhanh nhưng rủi ro • Con trỏ để tham chiếu đến các biến trong bộ nhớ • Cấp phát – giải phóng bộ nhớ
  • 31. #include <stdio.h> int main() { int a = 10; int *p = &a; printf("Value p points to %dn", *p); printf("Address that p points at %pn", p); printf("Address of p itself in mem %pn", &p); a = 11; printf("New value p points to %dn", *p); return 0; } Value p points to 10 Address of p points to 0x7fff5c049b68 Address of actual p 0x7fff5c049b60 New value p points to 11
  • 32. a = 100x7fff5c049b68 0x7fff5c049b60 p=1597348712 Value p points to 10 Address of p points to 0x7fff5c049b68 Address of actual p 0x7fff5c049b60 New value p points to 11
  • 33. Con trỏ có kích thước không? • Ở hệ điều hành 32bit, nó chiếm 4 bytes, ở hệ 64bit, nó chiếm 8 bytes • 32 bits = 4 bytes, dải vùng nhớ khoảng 4GB • 64 bits = 8 bytes lớn gấp 2^32 lần
  • 34. 1 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1
  • 35. Khả năng đánh địa chỉ hệ 64 bit You will never, ever be able to assemble a system that has 264 bytes (16 exibytes) of physical RAM. Second, just because an architecture uses 64-bit pointers, doesn't mean that all the bits of those pointers are actually used. Notably, current x86-64 CPUs (aka AMD64 and Intel's current 64-bit chips) actually use 48-bit address lines (AMD64) and 42-bit address lines (Intel) (see http://en.wikipedia.org/wiki/X86_64#Virtual_address_space _details ), theoretically allowing 256 terabytes of physical RAM. Trích https://superuser.com/questions/168114/how-much-memory-can-a- 64bit-machine-address-at-a-time/168120
  • 36. Mảng 1 chiều, 2 chiều
  • 37. Mảng - Array • Fixed size array • Memory allocated array int scores[] = {1, 2, 3}; char sizes[] = {'S', 'M', 'L'}; char* workdays[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; int *intArray = malloc(10* sizeof(int)); intArray[0] = 100; free(intArray);
  • 38. Đặc điểm mảng • Phần tử đầu tiên đánh vị trí 0 • Không thay đổi được kích thước sau khi khai báo • Các phần tử nằm liên tiếp nhau
  • 39. #include <stdio.h> #include <stdlib.h> int main() { const int N = 10; int *intArray = malloc(N * sizeof(int)); free(intArray); int i = 0; while (i < N) { intArray[i] = i; i++; } free(intArray); return 0; }
  • 40. int int2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d", int2D[i][j]); if (j < 2) { printf(", "); } else { printf("n"); } } } Mảng 2 chiều 1, 2, 3 4, 5, 6 7, 8, 9 In ra
  • 41. C string, mảng ký tự kiểu char
  • 42. H e l l o W o r l d 0 p Terminated character, value = 0; 0 1 2 3 4 5 6 7 8 9 10 p[2] char* p ="Hello World"; strlen(p) == 11
  • 43. Thư viện <string.h> • strlen trả về số ký tự • strcpy copy từ mảng này sang mảng kia • memset đặt 1 ký tự N lần vào mảng • strcmp so sánh 2 chuỗi https://www.tutorialspoint.com/c_standard_libr ary/string_h.htm
  • 44. #include <stdio.h> #include <string.h> int main() { char *p = "Hello World"; char str[] = "Hello World"; char chuoi[100]; strcpy(chuoi, "Hello World"); printf("%sn", chuoi); int val = strcmp(p, chuoi); if (val == 0) { printf("Giong nhaun"); } else { printf("Khac nhaun"); } memset(chuoi, 'A', 11); printf("%sn", chuoi); return 0; }
  • 45. Kiểu dữ liệu khác trong C
  • 46. Boolean: đúng hoặc sai • C không có kiểu nguyên thuỷ boolean • Dùng kiểu char lấy giá trị 0 hoặc 1 để thay thế • Hoặc dùng thư viện stdbool.h
  • 47. #include <stdbool.h> int main() { bool continueLoop = true; int i = 0; while (continueLoop) { if (i > 10) continueLoop = false; i++; } return 0; }
  • 48. struct • Gom nhiều biến liên quan thành một cụm • Có thể định nghĩa kiểu để tái sử dụng
  • 49. int main() { struct Book { char *title; char *author; int ISBN; } book; struct Book b; b.title = "The C Programming Language"; b.author = "Brian W Kernighan & Dennis M. Ritchie"; b.ISBN = 0131101633; return 0; }
  • 50. typedef typedef struct { char *title; char *author; int ISBN; } Book; struct Book { char *title; char *author; int ISBN; }; Ngắn gọn hơn typedef đặt tên mới cho kiểu
  • 51. #include <stdio.h> typedef unsigned char BYTE; typedef unsigned char BOOL; #define true 1 #define false 0 int main() { BYTE rock = 125; BOOL isTrue = true; if (isTrue) { printf("%d", rock); } return 0; } typedef đặt tên kiểu mới #define đặt tên giá trị
  • 53. C có hỗ trợ hướng đối tượng? • Không. C++ hỗ trợ hướng đối tượng • C++ là ngôn ngữ phát triển lên từ C
  • 54. C-99, C-11 là gì? • C-99 là tiêu chuẩn C được thống nhất năm 1999 • C—11 là tiêu chuẩn C được thống nhất năm 2011
  • 55. File binary biên dịch ở Windows có chạy được trên Linux không? • Không • Mã nguồn C là portable, có thể biên dịch lại trên các hệ điều hành khác nhau • Nhưng file binary biên dịch không portable