Tôi đã có một số mã tôi mantaining với việc kê khai biến sau đây:Đi qua C mảng như tham số chức năng char *
char tmpry[40];
Nó đang được sử dụng với chức năng này:
char *SomeFunction(char *tmpryP) {
// Do stuff.
}
Chức năng cuộc gọi là:
SomeFunction(&tmpry[0]);
Tôi khá chắc chắn rằng điều này cũng giống như:
SomeFunction(tmpry);
Tôi thậm chí đã kiểm tra con trỏ char * trong SomeFunction kết thúc trỏ đến cùng một vị trí bộ nhớ như mảng trong cả hai trường hợp.
Câu hỏi của tôi là kiểm tra sự chắc chắn về việc liệu hai cuộc gọi chức năng có giống hệt nhau không (và do đó lập trình ban đầu chỉ là khó chịu)?
Tôi nghĩ rằng nó sẽ là tốt để vượt qua một thời gian cũng để SomeFunction, chỉ trong trường hợp ... :) –
Tên của mảng ký tự là một bí danh cho địa chỉ của phần tử đầu tiên của mảng. – David
Xin chào, tôi là một trong những lập trình viên "khó chịu" đã viết như thế này. Nói chung, tôi làm điều này trong mã C++, vì lý do kết nối ít hơn với trừu tượng mảng được sử dụng tại thời điểm này. I E. cho một cấu trúc dữ liệu giống như mảng * trừu tượng (như 'std :: vector') với các toán tử 'overload []' quá tải 'x' và' & x [0] 'sẽ có nghĩa là những thứ rất khác nhau, và * giây * một là cái phù hợp hơn với ý định của tôi. Tất nhiên, tất cả điều này không quan trọng quá nhiều cho đồng bằng C, vì bạn hầu như không có dữ liệu trừu tượng trong C anyway; do đó chính tả với khả năng đọc vượt trội nên được ưu tiên. –
ulidtko