Cần giúp về kiểu con trỏ hàm ở C

Mọi người ơi, ai giải thích hay phân biệt cho em hai kiểu con trỏ này với ạ???
Một kiểu là dùng * để lấy giá trị và & để lấy địa chỉ
Như chương trình sau:

void plusone (int *n)
	{
		*n = *n + 1;
	}

int main()
{
	int n = 5;
	plusone(&n);
	printf("%d", n);
	return 0;
}

Kiểu khác là chỉ dùng & để lấy địa chỉ ở hàm
Như chương trình này:

void plusone (int &n)
	{
		n = 60 / n;
	}

int main()
{
	int n = 5;
	plusone(n);
	printf("%d", n);
	return 0;
}

Cho em hỏi hai kiểu này nó khác nhau sao và khi nào sử dụng được ạ?
Theo em thấy kiểu con trỏ hàm thứ 1 thì không dùng n++ được ???
Mọi người giúp em với !!!
Em cám ơn <3

Khác nhau thì có nhiều lắm, google stackoverflow là có hết. Điểm khác biệt cơ bản là C không hỗ trợ reference (tham chiếu) nên chương trình 2 không phải ngôn ngữ C. Tag nên đổi thành c++.

Còn khi nào sử dụng thì hãy né pointer hết mức có thể vì tham-chiếu an toàn, dễ hiểu và dễ sử dụng hơn con-trỏ. Một lần nữa, stackoverflow có hết.

Kiểu 1 “không dùng được” vì n++ làm con trỏ dịch lên và trỏ vào ô nhớ kế tiếp chứ không +1 vào gía trị biến n.

P/s: có test gì thì bạn cũng nên đặt tên biến có ý nghĩa. Đặt biến nào cũng n thì bạn sẽ tự khó hiểu thôi. Như chipu_parameterchipu_argument gì đó :joy:

3 Likes

ở cái trên n là 1 biến con trỏ, nếu bạn dùng n++ thì nó sẽtror sang ô kế tiếp, còn ở code dưới thì n là 1 giá trị int bình thường

1 Like

em tưởng có *n là nó sẽ lấy giá trị trực tiếp của n cộng 1 đơn vị chứ ạ <3
Em cám ơn bác nhiều ạ <3

khi mình thêm *n nó cũng không là giá trị mà vẫn là con trỏ hã bác ??? em cứ tưởng nó sẽ như các câu lệnh khác khi có * nó sẽ lấy giá trị trực tiếp.
Em cám ơn nhiều ạ <3

Bạn nói đúng mà, đâu có gì sai đâu :v chỉ là *n += 1 khác với n += 1 thôi.

2 Likes

lúc khai báo int *n thì n sẽ là con trỏ, còn sau khi khai bao xong, nếu viết *n thì nó sẽ là giá trị mà con trỏ n trỏ vào

1 Like

*n += 1 là cộng 1 giá trị của n
còn n += 1 là tăng 1 địa chỉ của n phải không ạ?
Em mông lung quá

với n là 1 con trỏ thì *n+=1 là tăng giá trị của ô nhớ mà con trỏ n trỏ vào lên 1 còn n+=1 là cho con trỏ n trỏ vào ô nhớ cạnh nó

1 Like

Cám ơn bác nhiều al <3

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