Проблема со строкой и указателями - PullRequest
1 голос
/ 20 апреля 2011

Может кто-нибудь сказать мне, почему эта программа не работает?

int main()
{
    char *num = 'h';
    printf("%c", num);
    return 0;
}

Я получаю ошибку:

1>c:\users\\documents\visual studio 2010\projects\sssdsdsds\sssdsdsds\sssdsdsds.cpp(4): error C2440: 'initializing' : cannot convert from 'char' to 'char *'

Но если я напишу такой код:

int main()
{
    char num = 'h';
    printf("%c", num);
    return 0;
}

это работает.

Ответы [ 6 ]

5 голосов
/ 20 апреля 2011
char *num = 'h';

Здесь буква 'h' представляет собой char, который вы пытаетесь присвоить char*.Два типа не одинаковы, поэтому вы получите проблему, которую видите выше.

Это будет работать:

char *num = "h";

Разница в том, что здесь вы используете двойные кавычки ("), который создает char*.

Это также будет работать:

char letter = 'h';
char* ptrToLetter = &letter;

Вы должны прочитать указатели в C, чтобы точно понять, что делают эти различные конструкции.

2 голосов
/ 20 апреля 2011

char * - это указатель на символ, не то же самое, что одиночный char.

Если у вас есть char *, то вы должны инициализировать его с ", а не с '.

А также, для форматирования в printf():

  • %s используется для char *
  • %c только дляchar.
0 голосов
/ 19 декабря 2015

Когда вы используете char *h, вы объявляете указатель на переменную char.Этот указатель хранит адрес переменной, на которую он указывает.

Проще говоря, поскольку вы просто объявляете переменную char как char num='h', тогда переменная num будет содержать значение h, и поэтому, если вы напечатаете ее, используя printf("%c",num), вы получитевыводить как h.

Но, если вы объявите переменную как указатель, как char *num, тогда она не сможет содержать никакое символьное значение.Я могу хранить только адрес некоторой символьной переменной.

Например, посмотрите на приведенный ниже код

void main()
{
    char a='h';
    char *b;
    b=&a;
    printf("%c",a);
    printf("%c",b);
    printf("%u",b);
}

, здесь у нас есть одна переменная типа a и один указатель типа b,Теперь переменная a может находиться где-то в памяти, которую мы не знаем.a содержит значение h, а &a означает address of a in memory. Оператор b=&a назначит адрес памяти a для b.Поскольку b объявлен как указатель, он может содержать адрес.

Заявление printf("%c",b) выведет значения мусора.

Оператор printf("%u",b) выведет адрес переменнойa в памяти.

, поэтому есть разница между char num и char *num.Сначала вы должны прочитать о указателях.Они отличаются от обычных переменных и должны использоваться очень осторожно.

0 голосов
/ 19 декабря 2015

Как кто-то только что сказал, когда вы пишете

char *num = 'h'

Компилятор выдает ошибку, потому что вы пытаетесь присвоить указателю значение.Вы знаете, указатели - это просто переменные, которые хранят только адрес памяти другой переменной, которую вы определили ранее.Тем не менее, вы можете получить доступ к адресу памяти переменной с помощью оператора:

&

И указатель переменной должен быть равным по типу с указанным элементом.Например, вот как вы должны правильно определить ptr:

int value = 5;

//defining a Ptr to value

int *ptr_value = &value;

//by now, ptr_value stores value's address

В любом случае, вы должны где-нибудь изучить, как все это работает и как можно реализовать ptrs, если у вас есть другие проблемы, попробуйте более конкретный вопрос:) * +1010 *

0 голосов
/ 20 апреля 2011

'h' = Char "h" = Строка с нулевым окончанием

int main()
{
    char *num = "h";
    printf("%s", num);   // <= here change c to s if you want to print out string
    return 0;
}

это будет работать

0 голосов
/ 20 апреля 2011

В первом случае вы объявили num как указатель на символ.Во втором случае вы объявляете его как символ.В каждом случае вы назначаете символ переменной.Вы не можете присвоить char указателю на char, следовательно, ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...