C ++ lặp qua kích thước mảng không xác định

Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn.

Bạn cũng có thể chọn một trang web từ danh sách sau

Làm thế nào để có được hiệu suất trang web tốt nhất

Chọn trang Trung Quốc (bằng tiếng Trung hoặc tiếng Anh) để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn

Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn.

Bạn cũng có thể chọn một trang web từ danh sách sau

Làm thế nào để có được hiệu suất trang web tốt nhất

Chọn trang Trung Quốc (bằng tiếng Trung hoặc tiếng Anh) để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn

Tôi đang cố gắng lặp qua một mảng chứa tối đa 4 phần tử – không có kiến ​​thức nào khác về độ dài mảng tồn tại

Mã giả

void insert_vals(uint8_t num, uint8_t *match_num, uint8_t *value)
{
    uint8_t i;

    while(data_exists)  // how do I determine if data exists in 'value'?
    {
        switch(num)
        {
            case 0:
            {
                switch(match_num[i])
                {
                    case 0:
                        hw0reg0 = value[i];
                    case 1:
                        hw0reg1 = value[i];
                    case 2:
                        hw0reg2 = value[i];
                    case 3:
                        hw0reg3 = value[i];
                }
            }
            case 1:
            {
                switch(match_num[i])
                {
                    case 0:
                        hw1reg0 = value[i];
                    case 1:
                        hw1reg1 = value[i];
                    case 2:
                        hw1reg2 = value[i];
                    case 3:
                        hw1reg3 = value[i];                 
                }
            }
            // etc. 2 other cases
        }
        i++;
    }
}

Ví dụ gọi (Mã giả)

/*
 * num: hardware device select from 1 - 4
 * match_num: 4 possible matches for each hardware device
 * value: 32-bit values to be assigned to 4 possible matches
 * NOTE: This function assumes hardware devices are selected
 * in a consecutive order; I will change this later.
 */

 // example calling code - we could have configured 4 hardware devices
 insert_vals(0, [0, 1], [0x00000001, 0x000000FF]);  // arg2 and arg3 equal in length

Làm thế nào tôi có thể thực hiện điều này?

Trong một mảng ký tự, C sẽ tự động thêm '\0' vào cuối mảng, nhưng điều này dường như không xảy ra với mảng số nguyên. Nếu bằng cách nào đó tôi có thể xác định độ dài của match_numvalue (xem câu lệnh if) trong thời gian chạy ban đầu, thì điều đó sẽ cho phép tôi tạo một vòng lặp for

Chỉnh sửa

Vì tôi biết rằng sẽ có tối đa 4 phần tử, tôi không thể làm điều gì đó tương tự như sau?

Tôi chỉ cần gửi một mảng đến một hàm mà hàm này sau đó cần đi
đi qua từng phần tử trong mảng. Tôi đã thử sử dụng sizeof(array) /
sizeof(array[0]) nhưng vì mảng được truyền vào hàm nên
sizeof(array) thực sự là sizeof . Nếu tôi không thể tính toán kích thước của
therefore doesn't solve my problem. If I can't calculate the size of
mảng, tôi có thể duyệt qua các phần tử mà không cần biết kích thước và
bằng cách nào đó kiểm tra xem tôi đã hiểu hết chưa

22 Jul '05 #1

9

C ++ lặp qua kích thước mảng không xác định
9824
C ++ lặp qua kích thước mảng không xác định

Ngày 14 tháng 7 năm 2004 21. 30. 03 -0700, ma**********@yahoo. com (matthurne)
đã viết trong comp. lang thang. C++.

Tôi chỉ cần gửi một mảng tới một hàm mà hàm này sau đó cần đi
đi qua từng phần tử trong mảng. Tôi đã thử sử dụng sizeof(array) /
sizeof(array[0]) nhưng vì mảng được truyền vào hàm nên
sizeof(array) thực sự là sizeof . Nếu tôi không thể tính toán kích thước của
therefore doesn't solve my problem. If I can't calculate the size of
mảng, tôi có thể duyệt qua các phần tử mà không cần biết kích thước và
bằng cách nào đó kiểm tra xem tôi đã hiểu hết chưa

Nhưng bạn biết kích thước của mảng, sau tất cả, bạn đã tạo ra
mảng.

Có hai khả năng xảy ra nếu bạn khăng khăng sử dụng mảng thay vì
std. véc tơ.

1. Truyền kích thước của mảng dưới dạng tham số bổ sung cho hàm
.

2. Nếu dữ liệu trong mảng cho phép, hãy có một giá trị sentinel giả
cho hàm được gọi biết rằng nó đã đến cuối mảng.
Đó là cách hoạt động của các hàm chuỗi thư viện C, '\0' đánh dấu kết thúc
của chuỗi.

--
Jack Klein
Trang chủ. http. //JK-Công nghệ. Com
Câu hỏi thường gặp về
comp. lang thang. c http. //www. người eskimo. com/~scs/C-faq/top. html
comp. lang thang. C++ http. //www. dịch chuyển dù. com/c++-faq-lite/
alt. máy tính. lang thang. học. c-c++
http. //www. đóng góp. rút lui. cmu. edu/~a. FAQ-acllc. html

22 Jul '05 #2

Ngày 14 tháng 7 năm 2004 21. 30. 03 -0700, matthurnewviết.

Tôi chỉ cần gửi một mảng đến một hàm mà hàm này sau đó cần đi
đi qua từng phần tử trong mảng. Tôi đã thử sử dụng sizeof(array) /
sizeof(array[0]) nhưng vì mảng được truyền vào hàm nên
sizeof(array) thực sự là sizeof . Nếu tôi không thể tính toán kích thước của
therefore doesn't solve my problem. If I can't calculate the size of
mảng, tôi có thể duyệt qua các phần tử mà không cần biết kích thước và
bằng cách nào đó kiểm tra xem tôi đã hiểu hết chưa

Không, bạn không thể, bạn có hai lựa chọn

1) Tùy chọn kém của người đàn ông, hãy chuyển kích thước của mảng vào hàm
ban đầu, để bạn có thể chuyển nó cho hàm sau.

2) Tùy chọn C++ phù hợp, sử dụng vectơ thay vì mảng. Các vectơ luôn mang theo
kích thước của chúng. Nói cách khác, vectơ làm những gì bạn đang
hy vọng rằng các mảng làm. Họ cũng có nhiều tính năng hữu ích khác như
có thể phát triển linh hoạt. Bạn chưa thực sự học lập trình C++
nếu bạn chưa học về vectơ. Đọc một cuốn sách C ++ đàng hoàng.

John

22 Jul '05 #3

"Jack Klein"đã viết trong tin nhắn

1. Truyền kích thước của mảng dưới dạng tham số bổ sung cho hàm
.

2. Nếu dữ liệu trong mảng cho phép, hãy có một giá trị sentinel giả
cho hàm được gọi biết rằng nó đã đến cuối mảng.
Đó là cách hoạt động của các hàm chuỗi thư viện C, '\0' đánh dấu kết thúc
của chuỗi.

Ngoài ra argv[argc] hợp lệ và trỏ tới NULL

int main(int argc, char * * argv) {
char * * iter = argv;
while (*iter) ++iter .
assert(iter-argv == argc); // should be true
argv[argc]; // ok, returns NULL
argv[argc+1]; // memory access violation!
}

Tương tự đối với phần mở rộng char * * phần mở rộng env được nhiều trình biên dịch hỗ trợ

int main(int argc, char * * argv, char * * env);

Sự kết hợp của phương thức (1) và (2) là để phần tử đầu tiên trong mảng
biểu thị số lượng phần tử theo sau. Như vậy ta sẽ có { 3, 7,
2, 4 } cho mảng 3 phần tử. Phần tử đầu tiên trong mảng này giống như
một lính canh cho biết số lượng phần tử trong mảng. Nhưng tất nhiên,
phương pháp này có thể không phải lúc nào cũng khả thi, nhưng đó là điều cần xem xét.

22 Jul '05 #4

Tất cả đề xuất của bạn đều hữu ích, tuy nhiên chúng không phải là giải pháp
cho vấn đề của tôi. Có vẻ như KHÔNG phải là giải pháp cho vấn đề của tôi. Thấy chưa, tôi
đang cố viết mã giải pháp cho câu hỏi
vấn đề đã lưu trữ của TopCoder. Để trả lời câu hỏi, tôi phải có một phương thức với
nguyên mẫu.

int sum(chuỗi s[])

Vì vậy, tôi không thể chuyển kích thước thành tham số khác. Ngoài ra,
vấn đề đã đưa ra các ví dụ về nội dung sẽ được truyền vào và nó chỉ đơn giản là
mảng chuỗi, không có bất kỳ loại giá trị/chuỗi canh gác nào để báo cho< . Vì vậy, ý tưởng đó là không nên. Tôi biết nếu tôi
the size of the array. Therefore, that idea is a no-no. I know if I
đang sử dụng điều này trong chương trình của riêng mình, tôi sẽ chấp nhận một trong các đề xuất
của bạn, nhưng tôi cho rằng nếu tôi thực sự trả lời điều này . . . . .
problem during a TopCoder competition, I would have to use the above
prototype or I would get the problem wrong.

Đây là suy nghĩ của tôi. có thể vấn đề đã được định hướng/có nghĩa là
được trả lời bằng Java. Đó là ngôn ngữ đầu tiên tôi thực sự học được bất cứ thứ gì
và tôi biết rằng Chuỗi trong Java có hàm size(), do đó
có vấn đề.

Nhân tiện, tôi đã sử dụng vectơ, bạn của tôi. Tôi thích chúng hơn
một mảng nhưng như tôi đã nói, tôi được cung cấp nguyên mẫu
ở trên cho vấn đề. Tôi thực sự gần như đã hoàn thành với Tăng tốc
C++. chương mà tôi vừa hoàn thành mô tả cách viết
lớp giống như véc tơ của RIÊNG bạn. Xin đừng cho rằng chỉ vì tôi đã hỏi một
câu hỏi cụ thể về mảng có nghĩa là tôi không biết gì khác
về C++.

22 Jul '05 #5

> Xin đừng cho rằng chỉ vì tôi hỏi

câu hỏi cụ thể về mảng nghĩa là tôi không biết gì khác
về C++.

OK, đã lấy điểm. Tôi thấy rất dễ chuyển sang giọng điệu hơi mỉa mai
khi trả lời trên c. l. c ++, đó là điều tôi không nên làm. Để bào chữa cho mình, tôi
nói rằng hầu hết thời gian đều có lời khuyên hữu ích đằng sau sự mỉa mai.

John

22 Jul '05 #6

"John Harrison"wrote in message news:<2l************@uni-berlin.de>...

Xin đừng cho rằng chỉ vì tôi đã hỏi
câu hỏi cụ thể về mảng có nghĩa là tôi không biết gì khác
về C++.

OK, đã lấy điểm. Tôi thấy rất dễ chuyển sang giọng điệu hơi mỉa mai
khi trả lời trên c. l. c ++, đó là điều tôi không nên làm. Để bào chữa cho mình, tôi
nói rằng hầu hết thời gian đều có lời khuyên hữu ích đằng sau sự mỉa mai.

John

Không sao, tôi thực sự không biết QUÁ nhiều về C++. Nhiều hơn
bạn đã giả định. ;-) Mặc dù không có mồ hôi.

Ồ, và tôi nhận ra sau bài đăng cuối cùng của mình rằng tôi muốn nói. có lẽ
vấn đề được viết cho Java vì ARRAYS trong Java có
hằng số độ dài. Điều tôi thực sự đã viết là Chuỗi trong Java có
phương thức size(), mà tôi tin rằng chúng thực sự có phương thức length()
, nhưng dù sao thì nó cũng vậy. . Doh. Vì vậy, vâng, đây chỉ là tôi sửa chữa bản thân mình.
anyway (that and strings in C++ have a size() method too, so no
difference there). Doh. So yeah, this is just me correcting myself.

22 Jul '05 #7

Bạn không thể sử dụng một biến toàn cục để ghi lại kích thước hay ít nhất là một
biến tệp toàn cầu?

Anil Mamede

matthurne đã viết

Tôi chỉ cần gửi một mảng đến một hàm mà hàm này sau đó cần đi
đi qua từng phần tử trong mảng. Tôi đã thử sử dụng sizeof(array) /
sizeof(array[0]) nhưng vì mảng được truyền vào hàm nên
sizeof(array) thực sự là sizeof . Nếu tôi không thể tính toán kích thước của
therefore doesn't solve my problem. If I can't calculate the size of
mảng, tôi có thể duyệt qua các phần tử mà không cần biết kích thước và
bằng cách nào đó kiểm tra xem tôi đã hiểu hết chưa

22 Jul '05 #8

Anil Mamede đã viết


Bạn không thể sử dụng một biến toàn cục để ghi lại kích thước hay ít nhất là một
biến tệp toàn cầu?
1. Vui lòng không lên top bài viết.
2. Giải pháp được đề xuất là một giải pháp mà người ta muốn tránh bằng mọi giá.

Anil Mamede

matthurne đã viết

Tôi chỉ cần gửi một mảng đến một hàm mà hàm này sau đó cần đi
đi qua từng phần tử trong mảng. Tôi đã thử sử dụng sizeof(array) /
sizeof(array[0]) nhưng vì mảng được truyền vào hàm nên
sizeof(array) thực sự là sizeof . Nếu tôi không thể tính toán kích thước của
therefore doesn't solve my problem. If I can't calculate the size of
mảng, tôi có thể duyệt qua các phần tử mà không cần biết kích thước và
bằng cách nào đó kiểm tra xem tôi đã hiểu hết chưa

--
Karl Heinz Buchegger
kb******@gascad. tại

22 Jul '05 #9

"Anil Mamede"đã viết trong tin nhắn. 40f7ba0b$0$1773

Bạn không thể sử dụng một biến toàn cục để ghi lại kích thước hay ít nhất là một
biến tệp chung?

Nếu có 2 mảng thì sao?

Sau đó có lẽ là một bản đồ

sẽ hoạt động, mặc dù nếu
hai luồng chèn hoặc xóa khỏi mảng cùng một lúc hoặc một luồng chèn hoặc
xóa còn luồng kia chỉ đọc, . Trên thực tế, một số cách triển khai thực hiện
removals, and reads with mutex locks -- so that only one thread can do
anything with the global map at one time. Some implementations do in fact
theo cách này, bởi vì khi bạn nói xóa [] mảng, chúng cần biết
số lượng phần tử trong mảng để .
then release the memory of the array.

Các cách triển khai khác có thể thêm vào trước số lượng phần tử trong mảng trong
vị trí -1. Vì vậy, đối với một mảng có độ dài 3 arr[0] = 7, arr[1] = 1, arr[2] =
9, trình biên dịch sẽ chèn một arr[-1]=3.

Cách tiếp cận bản đồ toàn cầu dường như có lợi thế là phân bổ lại dễ dàng hơn
vì bạn có thể thấy mảng hiện tại có thể phát triển bao nhiêu trước khi xung đột với
the next one.

22 Jul '05 #10

Chủ đề thảo luận này đã bị đóng

Trả lời đã bị vô hiệu hóa cho cuộc thảo luận này