Я начинаю с чего-то пытаюсь. Как я могу передать целочисленный массив функции, ожидающей char * в c/c++, поскольку диапазон char - это только -128 до 127, но я хочу хранить числа из целого диапазона целых чисел.
Вот что я пытался:
#include<stdlib.h>
#include<stdio.h>
int size = 12;
void print(char* array){
int i,j;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
printf("%d ",*(array+i*size+j));
printf("\n");
}
int main(){
int array[size][size];
int i=0,j=0,k=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
array[i][j]=k++;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
printf("%d ",array[i][j]);
printf("\n");
print((char *) array);
return 0;
}
Когда массив печатается внутри основной функции, выход является правильным (цифры 0-143), но внутри функции print() выход
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 11 0 0 0 12 0 0 0 13 0 0 0 14 0 0 0 15 0 0 0 16 0 0 0 17 0 0 0 18 0 0 0 19 0 0 0 20 0 0 0 21 0 0 0 22 0 0 0 23 0 0 0 24 0 0 0 25 0 0 0 26 0 0 0 27 0 0 0 28 0 0 0 29 0 0 0 30 0 0 0 31 0 0 0 32 0 0 0 33 0 0 0 34 0 0 0 35 0 0 0
Я не знаю, что я делаю неправильно.
PS Мне это нужно, так как я использую Apache Zookeeper, а набор и функции get требуют аргументов типа char * для ваших данных.
Точно так же вы можете использовать любой массив или указатель при использовании, например, send
for sockets: вы наводите указатель.
подобно
int data[DATA_SIZE];
...
send(s, (const char *) data, sizeof(data), 0);
Это очень часто, так как многие функции принимают указатель на char
даже для общих данных. Большой вопрос в том, что делает функция с данными.
send()
принимает const void *
указатель на данные для отправки. И, конечно же, вам никогда не нужно приводить указатель на void *
в C.
send
прежнему принимает символьный указатель. И я связал с MSDN ссылку send
.
C и C++ - разные языки.
"Целочисленный массив" не является типом C. Пожалуйста, укажите, например:
int my_array[42];
Вы не передавать массивы, в C. Если это не является операндом SizeOf, унарный & или _Alignof операторы, или используется в качестве инициализатора, выражение с типом массива определяет значение указателя на первый элемент массива. См. "Распад массива" по адресу http://www.iso-9899.info/wiki/Code_snippets.
В C вы всегда можете указывать указатель на любой полный или неполный тип объекта указателю на char *. int * - указатель на полный тип объекта. Зная эти факты, действует следующий код внутри тела функции:
int my_array[42];
char * what_i_want;
what_i_want = (char *) my_array;
Затем вы можете передать значение "what_i_want" любой функции, принимающей аргумент char *.
Сказав это, вам нужно понять, что ожидает функция. Поделитесь функцией и некоторым фактическим кодом, тогда, возможно, кто-то сможет предложить более глубокое понимание того, как достичь своей цели.
char *
также может использоваться для указания на строку, поэтому вы можете попробовать использовать соответствующие функции преобразования (int → string, string → int) для их передачи.
Если вы отправляете код, я могу попытаться предоставить более подробный ответ.
Char * - это единственный тип указателя, но вы можете предоставить эту функцию всем, что хотите. Вы можете сделать что-то вроде этого:
void func(char* aPointer)
{
int* arr = (int*)aPointer;
int firstInt = *arr;
...
}
Конечно, это очень жестокий способ, поэтому в этом случае вы должны быть очень осторожны, выполнять некоторые проверки и так далее.
char
точно исключением из строгого правила наложения имен?
void func(char* c)
{
...
}
int x[5] = {1,2,3,4,5};
func((char*)x);
char*
в C)? Покажите код, пожалуйста. Я полагаю, вы что-то неправильно поняли.