Mang va Con tro

12 12 0
Mang va Con tro

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

 Mỗi biến trong chương trình chiếm một vùng nhớ, ví dụ biến kiểu int chiếm 4 byte nhớ.  Vị trí của vùng nhớ được gọi là địa chỉ của biến.[r]

(1)

http://laptrinhc.edu.vn/bai-3-mang-va-con-tro-trong-lap-trinh-c.html

Chương : mảng trỏ c++

Chúng ta tiếp tục học lập trình hướng đối tượng c++ qua chương 3: mảng trỏ c++

Mảng

 Mảng (Array)

o Là tập vị trí nhớ liên tiếp

o Các phần tử mảng có tên kiểu

 Truy nhập tới phần tử mảng

o Xác định thông qua tên mảng số: arrayname[ position number ]

o Phần tử vị trí thứ

Khai báo mảng

type arrayName[ arraySize ];

int c[ 10 ]; // mảng c gồm 10 số nguyênfloat d[ 3284 ]; // mảng d gồm 3284 số thực  Có thể khai báo nhiều mảng kiểu

int b[ 100 ], x[ 27 ];

Khởi tạo mảng

 Sử dụng vòng lặp for: gán giá trị cho phần tử mảng

 Sử dụng danh sách khởi tạo:

o int n[ ] = { 1, 2, 3, 4, };

o Nếu không đủ giá trị khởi tạo phần tử cịn lại nhận giá trị mặc định

(2)

o Gán tất phần tử với giá trị int n[ ] = { };

o Nếu kích thước mảng khơng khai báo danh sách khởi tạo xác định:

int n[] = { 1, 2, 3, 4, }; //Mảng n có phần tử

Tham số mảng

 Tham số mảng biểu diễn kiểu liệu kích thước mảng

void display(float [n][m]);

 Hàm khơng cần biết kích thước mảng phải biết kích thước phần tử mảng

void myFunction(int n[]);

void display(float [][m]);

 Khi gọi hàm, ta cần truyền tên mảng

int myArray[ 24 ];

myFunction( myArray);

 Mảng truyền theo kiểu truyền tham chiếu

o Hàm chỉnh sửa liệu phần tử mảng o Tên mảng địa phần tử

Ví dụ :

1

(3)

3 10 11 12 13 14 15 16

void printarray (int arg[], int length) {

for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n";

}

int main () {

int firstarray[] = {5, 10, 15};

int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3);

printarray (secondarray,5); return 0;

}

Mảng nhiều chiều

 Mảng nhiều chiều coi mảng mảng

 Khai báo:

double sales[2][2];

sales[1][0]=2.5;

 Khởi tạo:

double sales[2][2]={{1.2,3.0},{-1.0,2.3}};

Xâu ký tự

 Là mảng ký tự

Tất xâu ký tự kết thúc với ký tự null (‘\0’)

 Ví dụ

char string1[] = “hello”;

Ký tự null tự động bổ sung.string1 có ký tự

(4)

Kiểu liệu string

 string lớp chuẩn C++

 Các ký tự string đánh từ

 Khởi tạo biến kiểu string sau: o string s1 (“Man”);

o string s2=“Beast”; o string s3;

 Ta sử dụng tóan tử tóan học, logic … đối tượng string o s3 = s1;

o s3 = “Neither” + s1 + “nor”; o s3 += s2;

string tốn tử

 Hàm getline(cin, string str): lưu thơng tin từ luồng vào chuẩn đưa vào str

 Ví dụ:

1

string full_name;

cout<< “Enter your fullname:”; getline(cin, full_name);

// full_name lưu thông tin mà người sử dụng nhập từ bàn phím

2 Con trỏ

 Mỗi biến chương trình chiếm vùng nhớ, ví dụ biến kiểu int chiếm byte nhớ

(5)

Biến trỏ

 Biến trỏ biến lưu giá trị địa vùng nhớ

 Mỗi kiểu liệu có biến trỏ riêng: trỏ kiểu int, trỏ kiểu char…

 C++ sử dụng:

 Toán tử & để lấy địa biến

 Toán tử * để lấy nội dung biến trỏ

 Ví dụ:

1

int i=17;

int* ptr; // khai báo biến trỏ kiểu int

ptr= &i; // gán địa biến i cho trỏ ptr cout << *ptr << endl; // hiển thị nội dung biến i

1

int v; // khai báo biến v kiểu int int w; // khai báo biến w kiểu int

(6)

4 1 1

p=&v;

// gán địa v cho trỏ p v=3;

// gán giá trị cho v *p=7;

// gán giá trị cho v p=&w;

// gán địa w cho trỏ p *p=12;

// gán giá trị 12 cho w

Con trỏ hằng

 Khai báo hằng:

1

const int result = 5; // result

result = 10; // sau gán lại giá trị C++ báo lỗi

 Khai báo trỏ

1

const char* answer_ptr = "Forty-Two";

// answer_ptr trỏ trỏ tới kiểu char

 Dữ liệu trỏ trỏ khơng thể thay đổi trỏ

1

answer_ptr = "Fifty-One"; // (answer_ptr biến trỏ) *answer_ptr = 'X'; // sai (*answer_ptr hằng)

 Nếu khai báo

1

char *const nameptr = "Test"; //name_ptr trỏ nameptr = "New"; // sai (name_ptr hằng)

*nameptr = 'B'; // (*nameptr char)

(7)

1 const char* const titleptr = "Title";

Con trỏ mảng

 Mảng truy nhập thơng qua trỏ

 Tên mảng trỏ trỏ tới kiểu liệu thành phần lưu trữ mảng

1

int array[5] = { 23, 5, 12, 34, 17 };

// sử dụng số để truy nhập tới phần tử mảng for (int i=0; i< 5; i++)

cout << array[i] << endl;

// sử dụng trỏ để truy nhập tới phần tử mảng for (int i=0; i< 5; i++)

cout << *(array+i) << endl; Ví dụ :

1 1 1

#include <iostream> using namespace std; int main ()

{

int numbers[5]; int * p;

p = numbers; *p = 10; p++; *p = 20;

p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++)

cout << numbers[n] << ", "; return 0;

}

(8)

 C++ cung cấp cách truyền tham số:

 Truyền tham trị: void f(int x);

 Truyền tham chiếu: void f(int& x);

 Truyền trỏ: void f(int* x);

1 1 1

void swap( double& x, double& y) {

double tmp=x; x=y;

y=tmp; }

void swap( double* ptr1, double* ptr2) { double tmp=*ptr1; *ptr1=*ptr2; *ptr2=tmp; } double a=3.0; double b=5.0

swap(a,b); // gọi tham chiếu biến a b swap(&a, &b); // sử dụng địa biến a b

1

void bsort (double* ptr, int n) {

int j,k;

for (j=0; j<n-1; j++) for(k=j+1; k<n; k++) if(*(ptr+j) > *(ptr+k)) swap(ptr+j,ptr+k); }

double array[6] = { 2.3, 4.5, 1.2, 6.8, 0.8, 4.9 }; bsort(array,n);

(9)

 Phân biệt phép toán biến trỏ biến thông thường

1

char *mychar; short *myshort; long *mylong; mychar++; myshort++; mylong++;

Con trỏ đến trỏ

1

char a; char * b; char ** c; a = 'z'; b = &a; c = &b

Con trỏ void

 Con trỏ void lưu địa biến có kiểu liệu

(10)

2 1 1

using namespace std;

void increase (void* data, int psize) {

if ( psize == sizeof(char) )

{ char* pchar; pchar=(char*)data; ++(*pchar); } else if (psize == sizeof(int) )

{ int* pint; pint=(int*)data; ++(*pint); } }

int main () {

char a = 'x'; int b = 1602;

increase (&a,sizeof(a)); increase (&b,sizeof(b));

cout << a << ", " << b << endl; return 0;

}

Con trỏ null

 Con trỏ có giá trị Null tức không trỏ vào địa nhớ cụ thể

Con trỏ hàm

 Thường sử dụng để truyền hàm tham số hàm khác

 Khi khai báo tham số trỏ hàm cần khai báo: o Prototype hàm

o Không sử dụng tên hàm o Đặt dấu * trước tên tham số

(11)

1 1 1 2 2 #include <iostream> using namespace std;

int addition (int a, int b) { return (a+b); }

int subtraction (int a, int b) { return (a-b); }

int operation (int x, int y, int *functocall)(int,int)) {

int g;

g = (*functocall)(x,y); return (g);

}

int main () {

int m,n;

int (*minus)(int,int) = subtraction; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n;

return 0; }

(12)

 Cấp phát nhớ thực thi chương trình

 Tốn tử new: cấp phát nhớ o pointer = new type

o pointer = new type [number_of_elements]

 Tốn tử delete: xóa vùng nhớ cấp o delete pointer;

o delete [] pointer;

Ví dụ :

1 1 1 #include <iostream> using namespace std; int main ()

{

int i,n; int * p;

cout << "How many numbers would you like to type? "; cin >> i; p= new int[i];

if (p == 0)

cout << "Error: memory could not be allocated"; else

{

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

cout << "Enter number: "; cin >> p[n];

}

cout << "You have entered: "; for (n=0; n<i; n++)

cout << p[n] << ", "; delete[] p;

}

(13)

2 2

Như lại tìm hiểu thêm mảng trỏ lập trình c++ , để hiểu rõ bạn tìm đọc lại mảng c trỏ c để tăng thêm lượng kiến thức

http://laptrinhc.edu.vn/bai-3-mang-va-con-tro-trong-lap-trinh-c.html lập trình hướng đối tượng c++ mảng c trỏ lập trình c

Ngày đăng: 17/12/2020, 14:11

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan