Chủ đề: Nhờ giúp đỡ dùm về con trỏ
-
12-05-2014, 02:29 PM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nhờ giúp đỡ dùm về con trỏ
Em có thử đoạn code như thế này:
// Khai báo hàm
void contro(unsigned int8 *p);
// Khai báo mảng hằng
CONST unsigned int8 a[5] = {2, 3, 4, 7, 9};
CONST unsigned int8 b[5] = {1, 2, 4,8, 6};
void main (void)
{ contro(a);
while(1) {}
}
void contro(unsigned int8 *p)
{ data = p[3] + 1; }
Sau đó xuất dữ liệu của biến data. Tại sao với đoạn code như vậy khi build thì lại báo lỗi là "Attempt to create a pointer to a constant" và hiển thị không đúng kết quả. Trong khi bỏ CONST thì kết quả lại đúng là 8. Có phải không thể sử dụng con trỏ với const ? Vậy có cách nào để tạo 1 hàm như contro chẳng hạn mà khi gọi hàm và đưa vào hàm contro giá trị mảng a, hoặc mảng b đều thực hiện những phép tính trong thân hàm ?? Mong mọi người chỉ dùm em nhé. Em xin cám ơn.View more random threads:
- Vấn đề về con trỏ và mảng !
- Sử dụng class viết danh sách quản lí sinh viên
- 4 dòng khó hiểu về con trỏ
- Đổi từ cơ số này sang cơ khác trong lập trình C++?
- viết chương trình đưa ra màn hình các hình có sẵn
- code của Liên Kết Đôi(QLSV) Giúp Em
- Cho hỏi vấn đề C rất hay
- Cho em hỏi về hàm qsort
- Kiểm tra chuỗi đối xứng, không phân biệt chữ hoa chứ thường và xóa các dấu câu có trong chuỗi
- Lỗi lập trình đồ họa trong C trên win xp ?
-
12-05-2014, 02:36 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nếu để cho bạn lấy pointer trỏ vào thì tính "HẰNG" ko đc đảm bảo nữa.
Vì vậy mảng hằng chỉ dùng làm bảng tra ở global hay local.
-
12-05-2014, 04:21 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi prog10
-
12-05-2014, 04:33 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Dùng cấp phát động ấy bạn.
Mà bạn dùng Turbo/Borland ah?
-
12-05-2014, 04:45 PM #5
Silver member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi .sunshine.
-
12-05-2014, 05:08 PM #6
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
^ Đó là nguyên nhân gần [IMG]images/smilies/biggrin.png[/IMG]
Nếu hàm có đối số là hằng con trỏ và truyền vào con trỏ thì đc.
-
12-05-2014, 05:21 PM #7
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi prog10
- - - Nội dung đã được cập nhật ngày 12-05-2014 lúc 10:21 PM - - -
Gửi bởi prog10
Gửi bởi HieuApp
-
13-05-2014, 03:15 PM #8
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi tanth90
Thực ra chủ theard không "thay đổi" giá trị của phần tử mảng nào cả.
cụ thể câu lệnh
Mã nguồn PHP:data=p[3]+1; //tuong duong: data=*(p+3)+1;
[IMG]images/smilies/thinking.gif[/IMG]
-
13-05-2014, 05:11 PM #9
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
^ Cái này mình nói rồi muh [IMG]images/smilies/smile.png[/IMG] (post #2)
-
13-05-2014, 07:06 PM #10
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
chào bạn, theo ý mình, khi bạn đã khai báo:
CONST unsigned int8 a[5] = {2, 3, 4, 7, 9}; // có hằng số constant nghĩa là mảng a này được khai báo là const, và các giá trị của mảng này sẽ không thay đổi (hoặc là không nên bị thay đổi).
do vậy, khi bạn sử dụng con trỏ p trỏ đến phần tử thứ 3 của mảng này và thay đổi giá trị phần tử thứ 3 của nó, khi thực thi sẽ báo lỗi.
Còn viêc sử dụng con trỏ với mảng CONST là được miễn bạn không được thay đổi giá trị của nó.
Còn nếu bạn muốn viết hàm contro(a) và thao tác (thêm, sửa, xóa) với mảng a thì bạn không được khai báo mảng a là constant.
Nếu bạn muốn biết cụ thể hơn thì search về passing parameter by reference.
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...