Hỏi về toán tử con trỏ

#include<iostream>

using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	int **arr;
	arr = new int *[n];
	for (int i = 0; i < n; i++) {
		arr[i] = new int [m];
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> arr[i][j];
		}
	}
	for (int i = 0; i < n; i++) {
		int sum = 0;
		for (int j = 0; j < m; j++) {
			sum += arr[i][j];
		}
		cout << sum << endl;
	}
	for (int i = 0; i < n; i++) {
		delete []arr[i];
	}
	delete []arr;
	return 0;
}

tại sao arr = new int *[n] chạy nhưng arr[i] = new int *[m] lại không chạy vậy? và theo e biết thì khi nào mình tạo biến con trỏ thì mới cấp phát bộ nhớ (new int) vậy tại sao [m] lại dùng? nếu e hiểu sai thì xin thông cảm ạ :sweat_smile:

Để em giúp bác format lại code đã:

#include <iostream>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int ** arr;
    arr = new int * [n];
    for (int i = 0; i < n; i++) {
        arr[i] = new int[m];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> arr[i][j];
        }
    }
    for (int i = 0; i < n; i++) {
        int sum = 0;
        for (int j = 0; j < m; j++) {
            sum += arr[i][j];
        }
        cout << sum << endl;
    }
    for (int i = 0; i < n; i++) {
        delete[] arr[i];
    }
    delete[] arr;
    return 0;
}
2 Likes

Hi

int **arr;

đây là double pointer, con trỏ trỏ (1) đến 1 con trỏ(2) trỏ tới 1 vùng nhớ kiểu int =))

arr = new int *[]

allocate cho con trỏ 1, vì con trỏ 1 trỏ đến con trỏ. Nên ta dùng new int *

arr[i] = new int [m]

allocate cho con trỏ 2. Vì con trỏ 2 trỏ đến 1 vùng nhớ kiểu int. Nên ta dùng new int

4 Likes

mặc dù có 3 dòng nhưng vẫn rối gớm =))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?