Vào thẳng vấn đề luôn , chỉ số trong mảng có nhất thiêt phải bắt đầu từ 0 không ạ, vì tình hình là em toàn cho chạy từ 1 cho tiện, và vẫn chạy ngon lành không thấy lỗi phải gì cả
Announcement
Collapse
No announcement yet.
[HELP] Chỉ số trong mảng?
Collapse
X
-
Originally posted by 12520436 View PostVào thẳng vấn đề luôn , chỉ số trong mảng có nhất thiêt phải bắt đầu từ 0 không ạ, vì tình hình là em toàn cho chạy từ 1 cho tiện, và vẫn chạy ngon lành không thấy lỗi phải gì cảPHP Code:int a[5];
int i;
for (i = 1; i <= 5; ++i)
a[i] = i;
for (i = 1; i <= 5; ++i)
printf("%d\n", a[i]);
-
Tất nhiên là chỉ số mảng luôn đc đánh từ [0 ... n-1] với n là số phần tử của mảng.
Còn bạn xài thì miễn nằm trong khoảng đó thì OK,không lỗi.
Nhưng không nên thế . viết Code để sau này dễ bảo trì , phát triển, để người khác còn tiếp thu nữa chứ.
Im a british accent lover
Comment
-
nếu như bạn xét trong khoảng từ 0..n-1 thì k ảnh hưởng gì(như anh Tuấn Anh đã nói),nhưng hãy xem đoạn code sau:
Code:int a[5] for(int i=1;i<=5;i++) a[i]=i;
Comment
-
Originally posted by 11520154 View Postnếu như bạn xét trong khoảng từ 0..n-1 thì k ảnh hưởng gì(như anh Tuấn Anh đã nói),nhưng hãy xem đoạn code sau:
Code:int a[5] for(int i=1;i<=5;i++) a[i]=i;
Dĩ nhiên nếu các bạn khai báo mảng 5 phần tử nhưng chỉ xài 4 phần từ từ 1->4 thay vì 5 phần tử từ 0->4 cũng không gặp lỗi phải gì cả. Chương trình vẫn chạy, nhưng cái đó không tiện chỗ nào cả. Thứ nhất là nó lãng phí 1 ô nhớ, nhưng cái nghiên trọng hơn là làm vậy nó không giống ai, người ngoài nhìn vào sẽ khó hiểu.
Tại sao không dùng phần tử thứ 0 ? Có gì đặc biệt ở chỗ đó ? Lỡ ghi vào đó thì có chuyện màu nhiệm gì xảy ra không? Sau này các bạn viết chương trình chung với rất nhiều người, code phải để cho nhiều người cùng đọc chứ đừng làm mọi người có cớ nghi ngờ trình độ lập trình của bạn vì những cái kỳ quặc không đáng như vầy.Last edited by sinhvien.uit; 23-12-2012, 21:01.
Comment
-
Sau một hồi tra bác google có nhiều đáp án, bạn thấy cái nào thuyết phục thì get nó zìa, đi kèm là ví dụ A[5] -> mảng A có 5 phần tử- A[0] -> index ở đây cho biết số bước mà mình phãi trỏ tới bộ nhớ, số 0 ư -> ko cần phãi di chuyển đi đâu cả, cứ nằm yên ở vị trị bắt đầu mảng, A[1] -> số 1 ư -> nhảy 1 bước, tính từ vị trị bắt đầu mảng là tới nó. Nếu ko bắt đầu từ 0 -> oke, ko sao, nhưng lảng phí hết vài byte cho vị trí bắt đầu của mảng -> chống lãng phí.
- Tại sao lại là 0 mà ko phãi 1 -> oke hãy xét vòng lặp for đi kèm với mảng "(for int i = 0 ; i< count(array); i++ )" -> câu lệnh kinh điển của dân IT, hãy xét 2 trường hợp:
- (for int i = 0 ; i< count(array); i++ ) -> i bắt đầu từ 0 tương ứng là 000 -> 3 số 0 tượng trưng cho 3 dòng điện có Volt thấp
- (for int i = 1 ; i< count(array); i++ ) -> i bắt đầu từ 1 tương ứng là 001 -> 2 số 0 và 1 số 1 tượng trưng cho 2 dòng điện có Volt thấp và 1 dòng điện có Volt cao
-> chống lãng phí điện năng
- Xét tiếp vòng for -> Máy tính của chúng ta có một đặc điểm rất vui là nó luôn bắt đầu từ 0, ví dụ khi khai báo int i = 1 thì tương đương 2 câu lệnh nhỏ sau đây
- int i = new int();
- i = 1;
- Còn nếu khai báo int i = 0 thì tương đương zới 1 câu lệnh nhỏ sau đây
- int i = new int();
-> Có thể tối ưu hóa tốc độ
Last edited by 09520147; 24-12-2012, 00:05.
Comment
- A[0] -> index ở đây cho biết số bước mà mình phãi trỏ tới bộ nhớ, số 0 ư -> ko cần phãi di chuyển đi đâu cả, cứ nằm yên ở vị trị bắt đầu mảng, A[1] -> số 1 ư -> nhảy 1 bước, tính từ vị trị bắt đầu mảng là tới nó. Nếu ko bắt đầu từ 0 -> oke, ko sao, nhưng lảng phí hết vài byte cho vị trí bắt đầu của mảng -> chống lãng phí.
-
Originally posted by 09520147 View Post[/list][*] Tại sao lại là 0 mà ko phãi 1 -> oke hãy xét vòng lặp for đi kèm với mảng "(for int i = 0 ; i< count(array); i++ )" -> câu lệnh kinh điển của dân IT, hãy xét 2 trường hợp:- (for int i = 0 ; i< count(array); i++ ) -> i bắt đầu từ 0 tương ứng là 000 -> 3 số 0 tượng trưng cho 3 dòng điện có Volt thấp
- (for int i = 1 ; i< count(array); i++ ) -> i bắt đầu từ 0 tương ứng là 001 -> 2 số 0 và 1 số 1 tượng trưng cho 2 dòng điện có Volt thấp và 1 dòng điện có Volt cao
-> chống lãng phí điện năng
[*] Xét tiếp vòng for -> Máy tính của chúng ta có một đặc điểm rất vui là nó luôn bắt đầu từ 0, ví dụ khi khai báo int i = 1 thì tương đương 2 câu lệnh nhỏ sau đây- int i = new int();
- i = 1;
[*]Còn nếu khai báo int i = 0 thì tương đương zới 1 câu lệnh nhỏ sau đây- int i = new int();
-> Có thể tối ưu hóa tốc độ [/LIST]
Comment
-
Xét tiếp vòng for -> Máy tính của chúng ta có một đặc điểm rất vui là nó luôn bắt đầu từ 0, ví dụ khi khai báo int i = 1 thì tương đương 2 câu lệnh nhỏ sau đây
int i = new int();
i = 1;
[*]Còn nếu khai báo int i = 0 thì tương đương zới 1 câu lệnh nhỏ sau đây
int i = new int();
-> Có thể tối ưu hóa tốc độ
int i =new int(); i=1; // vãi cả code . vãi cả tương đương
Im a british accent lover
Comment
Comment