2016-03-09 4 views
-1

Я хотел бы присвоить указатель на константный символ * массив как это:назначения указателя на константный полукокс * [] в C

#include <stdio.h> 


const char *keyContainer[2]= {"test", "test2" }; 
const char *keyPtr = &keyContainer; 


int main(void) 
{ 
    printf("%s\n", keyPtr[0]);  //test 
    printf("%s\n", keyPtr[1]);  //test2 

    return 0; 
} 

keyPtr содержит адрес keyContainer, но я не могу получить доступ к контенту keyContainer.

+1

Что вы имеете в виду, вы не можете? Что вы пробовали и каковы были результаты? – cozyconemotel

+1

Хорошим местом для начала было бы правильно объявить указатель. То, что вам нужно, должно давать ошибку времени компиляции из-за несовместимых типов указателей. –

+0

хорошо, что вы правы, я должен скомпилировать код перед отправкой в ​​следующий раз –

ответ

2

При использовании этого вы получите предупреждение «Initialization от несовместимого типа указателя [по умолчанию включено]», и это потому, что keyContainer является char *[2], который мы будем говорить, может быть похож (не то же самое!), Как char ** , Поэтому вам нужно использовать const char **keyPtr = keyContainer;.

Например:

#include <stdio.h> 

const char *keyContainer[2]= {"test", "test2" }; 
const char **keyPtr = keyContainer; 

int main(void) 
{ 
    printf("%s\n", keyPtr[0]); 
    printf("%s\n", keyPtr[1]); 

    return 0; 
} 

Надеется, что это помогает!

+0

Я склонен рассматривать динамические инициализации массива как плохую идею (и плохое дополнение к языку C). 'keyContainer' должен быть действительно статичным. –

+0

Я полностью согласен с вами, но это должно было объяснить, почему указатель был плохо инициализирован. – haltode

+0

Было бы лучше разместить 'keyContainer' вне функции (и, возможно,' keyPtr', а также для простоты). –

Смежные вопросы