Hỏi về tính chất của cấp phát bằng toán tử new

Tại sao p[5] không đổi?

void f(int *a, int n)
{	
	a = new int[100]; // Nếu không có dòng này thì p[5] = 7
	*(a + n) = 7;
}
int main()
{
	int *p;
	p = new int[10];
	int i = 5;
	*(p + i) = 100;
	cout << "p[" << i << "] = " << p[i] << endl;
	cout << "*(p + " << i << ") = " << *(p + i) << endl;
	// Output: p[5] = 100
	// *(p + 5) = 100
	f(p, i);
	cout << "Sau khi goi ham f" << endl;
	cout << "p[" << i << "] = " << p[i] << endl;
	cout << "*(p + " << i << ") = " << *(p + i) << endl;
	// Output: p[5] = 100
	// *(p + 5) = 100
	delete[] p;
	system("pause");
	return 0;
}

Thêm tag ngôn ngữ vào đi bạn :smiley:

Do p được truyền tham trị :smiley: (qua a) nên a thay đổi thì không làm thay đổi được p bên ngoài. Tham biến thì ngược lại thôi.

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