#c #pointers #dynamic-arrays
#c #указатели #динамические массивы
Вопрос:
Я застрял в двумерном динамическом массиве C . Я хочу получить длину массива. Вот код:
#include <iostream>
using namespace std;
int dosomestuff(char **dict);
int main(){
int x, y;
char **dict;
cin>>x>>y; // here to input the 'x'
dict = new char *[x];
for(i = 0; i < x; i ){
dict[i] = new char[y];
for(j = 0; j < y; j ){
cin>>dict[i][j];
}
}
dosomestuff(dict);
}
int dosomestuff(char **dict){
int x, y;
x = sizeof(*dict); //8 not equal to the 'x'
//run in mac_64 I think this is the pointer's length
y = strlen(dict[0]); //this equal to the 'y' in function main
cout<<x<<" "<<y<<endl;
return 0;
}
Я хочу, чтобы в функции dosomestuff значение x было равно «x» в функции main.
Как я могу это получить? Кто-нибудь может мне помочь ~? Спасибо большое.
Комментарии:
1. Используйте какой-то
Matrix
класс, который сообщает вам размер и очищает память (чего вы не делаете).2. Есть ли какая-нибудь простая функция, такая как ‘sizeof’, для получения длины? Потому что мне это нужно для решения вопроса о структуре данных.
3.
sizeof
является оператором. И как только вы преобразуете его в указатель, размер исчезнет.4.
dict[0]
совпадает с*dict
5. О, здесь я использую strlen(dict[0]), чтобы получить длину, забыл ее изменить. Спасибо за ваше внимание. @MattMcNabb
Ответ №1:
sizeof(*dict)
дает вам только sizeof(char*)
то, на что вы не надеетесь.
Невозможно узнать значение x
из dict
in dosomestuff
. Если вы хотите использовать char**
for dict
, лучшим вариантом будет передать x
и y
to dosomestuff
.
int dosomestuff(char **dict, int x, int y);
Поскольку вы используете C , вы можете использовать:
std::vector<std::string> dict;
Тогда у вас будет вся необходимая информация dosomestuff
, если вы передадите ее dict
ему.
Комментарии:
1. Даже не заметил, что нижний тип был
char
. Хороший улов.2. @RSahu Забыл поблагодарить вас. = = Я новичок в c . Спасибо за вашу помощь ~ 🙂
3. @Tyler.z.yang, добро пожаловать. Я рад, что смог помочь.