Код 1: предупреждение отсутствует. работа идеальный.const char ** и char **
#include <stdio.h>
void printP(const char *p)
{
printf("const char *p is : %p\n",p);
if(p)
printf("%s\n",p);
}
void printP2P(const char **p)
{
printf("const char **p pointer to : %p\n",*p);
if(p &&(*p))
printf("%s\n",*p);
}
int main()
{
char a[] = "Hello World";
const char *p = a;
const char **p2p = &p;
printP(p);
printP2P(p2p);
return 0;
}
Код 2: может работать.
предупреждение: инициализации от несовместимого типа указателя [по умолчанию включено]
const char *p = a;
==>
char *p = a;
Код 3: неисправности Segementation.
предупреждение: инициализации от несовместимого типа указателя [по умолчанию включено]
const char **p2p = &p;
==>
const char **p2p = &a;
Проблема:
- Почему код 2 может работать, но код 3 получил ошибку segement?
2.При пропуск chat *
в const char *
, никакого предупреждения или ошибки не произошло, но когда я присваивание char **
к const char **
, я получил предупреждение, почему?
+1. Не так смутно. C-стандарт хорошо ее охватывает в 6.2.5.20, а вторая половина [этого ответа] (http://stackoverflow.com/questions/13005070/in-c-the-name-of-an-array-is- an-pointer-to-its-first-element-isnt-it/13005613 # 13005613) бьет его до смерти. – WhozCraig
@WhozCraig, да, но я думаю, что OP смущен тем, что, следовательно, получил этот вопрос. – Rohan
Я полностью согласен, таким образом, «через некоторое время» и не прямо от ворот. – WhozCraig