1. Trang chủ
  2. » Công Nghệ Thông Tin

Ngôn ngữ lập trình C và C++

5 9 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 276,39 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tham khảo tài liệu ''ngôn ngữ lập trình c và c++'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Trang 1

Ch ng 7*: M t s ch đ nâng cao

7*.1 Con tr

a) Con tr null:

− Là con tr mà không tr t i đâu c

− Không th s d ng toán t * đ l y giá tr c a con tr null N u làm nh v y thì d n

t i l i run-time

− Con tr null có ích khi dùng trong danh sách liên k t (linked-list) ho c hàm s tr v con tr null trong tr ng h p hàm có l i (v i hàm tr v m t con tr )

b) Con tr void:

− Tr t i m t ki u ch a xác đ nh

− Ng i ta c ng không th l y giá tr c a con tr void ho c s d ng toán t s h c v i

nó nh ng nó có th d dàng chuy n thành con tr thu c ki u khác

c) Con tr tr t i con tr : (pointer to pointer): Là con tr ch a đ a ch c a con tr khác

int i = 5, j = 6; k = 7;

int *ip1 = &i, *ip2 = &j;

int **ipp; // Con tr tr t i con tr

7*.2 Tham chi u:

Trang 2

int i; int &ir = i; // đ t ir là bí danh c a i – là cách g i khác cho bi n i

î Thay vì gán i = 8; có th vi t ir = 8;

− So sánh tham chi u và con tr

o Gi ng: u ch a đ a ch c a bi n

Ví d :

swap2(int &a, int &b) {

int t=a; a=b; b=t;

}

int x,y; swap2(x, y);

ho c int &dx = x, &dy = y;

swap2(dx, dy);

o Khác: Tham chi u ph i đ c kh i t o (tr t i 1 bi n), con tr có th tr đ n NULL Con tr có th thay đ i đ a ch tr t i, còn tham chi u thì không

7*.3 Qu n lý b nh :

− C cung c p 3 cách riêng bi t đ c p phát b nh cho các đ i t ng

o C p phát t nh: Không gian nh cho các đ i t ng (bi n, h ng, hàm v.v.) đ c cung c p vào th i đi m biên d ch Nh ng đ i t ng này s t n t i ch ng nào ph n

đo n mã nh phân ch a chúng còn t n t i

o C p phát t đ ng: các đ i t ng có th đ c l u tr vào các stack Không gian

nh này đ c t đ ng gi i phóng và tái s d ng sau khi kh i câu l nh s d ng chúng không còn tác d ng n a

o C p phát đ ng: Các kh i nh v i ki u mong mu n có th đ c yêu c u vào th i

đi m ch y s d ng các hàm trong th vi n nh malloc() t m t vùng nh

đ c g i là heap Nh ng kh i nh này s đ c s d ng tái s d ng sau khi hàm

th vi n free đ c g i

− Nh ng cách ti p c n này là phù h p trong nh ng tình hu ng khác nhau

− C p phát t đ ng ho c c p phát t nh th ng hay đ c s d ng vì vi c l u tr đ c trình biên d ch qu n lý, giúp l p trình viên tránh kh i nh ng sai sót d g p ph i khi

ph i t mình c p phát và gi i phóng b nh

Ví d : C p phát s d ng malloc và free

Trang 3

o C p phát đ ng cho m ng 1 chi u:

scanf("%d", &n);

int memsize = n*sizeof(int);

if ( (arr = (int *)malloc(memsize) ) == NULL ) {

printf("Khong cap phat duoc bo nho");

exit(1);

}

//

free(arr);

o C p phát đ ng cho m ng 2 chi u:

float **ptr;

int m,n,i;

//Kh i t o m ng ptr[m][n]

//Kh i t o chi u th nh t c a m ng

ptr=(float **)malloc(m*sizeof(*ptr));

for(i=0;i<m;i++)

//Kh i t o chi u th hai c a m ng

ptr[i]=(float*)malloc(n*sizeof(**ptr));

//Xóa vùng d li u đã c p phát

for(i=0;i<m;i++)

free(ptr);

7*.4 Hàm – Tham s , tr tr v

a) L u gi giá tr c a bi n sau khi k t thúc hàm:

}

b) Truy n m ng cho hàm:

int GetMax(int arr[], int n) {

int max = arr[0];

Trang 4

int GetMax2(int *arr, int n) {

int max = *arr;

for(i=1; i<n; i++) {

max = ( max<*(arr+i) )?*(arr+i):max;

}

}

c) Truy n m ng hai chi u cho hàm:

func(int a[5][7]) { /* ÚNG */

}

func(int a[][7]){ /* ÚNG */

}

func(int (*a)[7]){ /* ÚNG */

}

nh sau là sai:

func(int **a) { /* SAI! */

}

d) Hàm tr v m t m ng:

int *Bsort(int *a, int N) {

int i, j;

for (i=0; i<N-1; i++) {

for (j=i+1; j<N; j++) {

if (a[i] > a[j]) {

int temp = a[i];

} }

}

}

Trang 5

e) Hàm tr v m t xâu ký t :

Ví d 1:

char *month_name(int n)

{

static char *name[] = {

"Illegal month",

"January", "February", "March",

"April", "May", "June",

"July", "August", "September",

"October", "November", "December"

};

return (n < 1 || n > 12) ? name[0] : name[n]; }

Ví d 2:

char *itoa(int n) {

char retbuf[25];

sprintf(retbuf, "%d", n);

return retbuf;

} // SAI

char *itoa(int n) {

char *retbuf = malloc(25);

if(retbuf == NULL)

return NULL;

sprintf(retbuf, "%d", n);

return retbuf;

} // ÚNG

char *itoa(int n) {

static char retbuf[25];

sprintf(retbuf, "%d", n);

return retbuf;

} // ÚNG

char *itoa(int n, char buf[]) {

sprintf(buf, "%d", n);

return buf;

} // ÚNG

Ngày đăng: 11/05/2021, 18:56