C: parser string hiệu năng cao
Không nên sử dụng sscanf mà hãy sử dụng strtof
typedef int bool;
#define true 1
#define false 0
typedef int bool;
enum { false, true };
typedef enum { false, true } bool;
#include
Để in ra giá trị biến bool bằng printf :
bool x = true;
printf("%d\n", x); // prints 1
Hoặc in ra kết quả bằng tenary operator.
printf(x ? "true" : "false");
Hoặc đẹp hơn.
printf("%s", x ? "true" : "false");
Hoặc đẹp hơn nữa.
fputs(x ? "true" : "false", stdout);
#define SIZE 10
int size;
int array[size];
#include
// A normal function with an int parameter
// and void return type
void fun(int a)
{
printf("Value of a is %d\n", a);
}
int main()
{
// fun_ptr is a pointer to function fun()
void (*fun_ptr)(int) = &fun;
/* The above line is equivalent of following two
void (*fun_ptr)(int);
fun_ptr = &fun;
*/
// Invoking fun() using fun_ptr
(*fun_ptr)(10);
return 0;
}
Value of a is 10
fun
. Sau đó ta tạo một con trỏ, trỏ tới hàm fun bằng:void (*fun_ptr)(int) = &fun;
void (*fun_ptr)(int);
fun_ptr = &fun;
(*fun_ptr)(10);
Lưu ý ở đây ta đã khai báo kiểu của tham số là int nên không cần phải typecast về int trước.int array[5][10];
int el;
el = array[2][3];
el = *(array + 2)[3];
el = *(*(array + 2) + 3);
array[0]
, phần tử mảng này là kiểu int, vì vậy nó có độ rộng 4kb (cái này tuỳ hệ điều hành), vì thế array[2]
sẽ cách array[0]
2 block 4kb trên bộ nhớ. Vì thế để access array[2]
bằng cấu trúc con trỏ ta có thể sử dụng *(array+2)
*(array+2)
lại tham chiếu tới địa chỉ đầu tiên của mảng khác. Lúc này để access phần tử thứ 3 của mảng *(array+2)
thì ta phải dùng *(*(array+2)+3)
int argc, char *argv[]
có nghĩa là gì. argc: argument count (số lượng)
argv: argument vector (danh sách)
hello.exe
# hello.exe a b c d
argc=5
, argv={"hello.exe","a","b","c", "d"}
đây là các tham số ta nhập vào