1. Trang chủ
  2. » Nghệ sĩ và thiết kế

Mang va Con tro

12 12 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 121,86 KB

Nội dung

 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

w