Нет, это не сработает. sizeof
указатель возвращает только размер типа указателя, а не тип массива. Когда вы передаете массив как параметр функции, массив распадается на на указатель, что означает, что компилятор больше не будет знать, на что именно указывает, и если это массив, как долго это может быть. Единственные способы для вас, чтобы знать его внутри функция
- передать длину в качестве дополнительного параметра, или
- добавить дополнительный элемент терминатора в массив.
Обратите внимание, что массивы на C и C++ не сохраняют их размер каким-либо образом, поэтому программист должен помнить об этом и программировать соответствующим образом. В приведенном выше коде вы знаете, что фактический размер a
равен 5, но компилятор (и среда выполнения) не знает об этом. Если вы объявили его в виде массива, т.е.
char[] word = new char [5];
компилятор следить за его размера и sizeof
бы вернуть этот размер (в байтах), в то время как в рамках этой декларации. Это позволяет применять хорошо известную идиому, чтобы получить фактический размер массива:
int size = sizeof(a)/sizeof(char);
Но опять же, это работает только до тех пор, как компилятор знает, что a
на самом деле массив, так что это не возможно, внутри где a
передается как параметр (указатель).
[Здесь] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an-array) отвечает на один и тот же вопрос, хотя для C. – benjer3