01/10/2018, 12:29
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
Bài liên quan
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ếnn
.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_parameter
vàchipu_argument
gì đóở 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
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ứ ạ <3Em 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ớin += 1
thôi.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
*n += 1
là cộng 1 giá trị của ncò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ó
Cám ơn bác nhiều al <3