Я новичок в C/C++ и узнаю о массивах. Я только что закончил чтение о передаче массивов в функции, и я пытаюсь его реализовать. Я начинаю с массива x[] = "Hello
, который, конечно, имеет sizeof()
6. Но по какой-то причине, когда я передаю его своей функции listElements(char arr[])
, я получаю sizeof(arr)
, равный 4. Почему мой массив обрезается вот так?C++ Array Pass to Function отключается
Кроме того, sizeof(char)
на мой компилятор 1.
#include <iostream>
using namespace std;
void listElements(char[]);
int main(){
char x[] = "Hello";
cout << sizeof(x) << endl; // 6
listElements(x);
cin >> x[0];
return 0;
}
void listElements(char arr[]){
cout << "Size of arr: " << sizeof(arr) << endl; // 4 <--- why is this 4?
cout << "Size of char: " << sizeof(char) << endl; // 1
for (int j = 0; j < (sizeof(arr)/sizeof(char)); j++){
cout << arr[j] << endl;
}
return;
}
Массивы распадаются на * указатели *, поэтому 'sizeof (arr)' в функции - это размер указателя, а не массив, который вы передаете функции. Используйте 'strlen' для получения длины строки. Или, поскольку вы программируете на C++, вместо этого используйте ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string). –
sizeof (char) is * always * 1. – ryanpattison
см. [Почему компиляторы C и C++ допускают длину массива в сигнатурах функций, когда они никогда не применяются] (http://stackoverflow.com/questions/22677415/why-do-do- c-and-c-compilers-allow-array-length-in-function-signature-when-they) –