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ên float 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