Вычитание char-массива из char-указателя дает int?

в strchr ссылка на http://www.cplusplus.com/reference/cstring/strchr/, этот пример предоставляется.

/* strchr example */
#include <stdio.h>
#include <string.h>

int main ()
{
char str[] = "This is a sample string";
char * pch;
printf ("Looking for the 's' character in \"%s\"...\n",str);
pch=strchr(str,'s');
while (pch!=NULL)
{
printf ("found at %d\n",pch-str+1);
pch=strchr(pch+1,'s');
}
return 0;
}

Почему вычитание char массив str от char указатель pch плюс один дать int? (как обозначено %d тип формата) если уберу «-str«, программа не будет выполняться, пока я не изменю %d в %s,

1

Решение

Короче говоря, это ошибка:
Это выражение может иметь тип intили вы могли бы иметь Неопределенное поведение в призыве к printf,

Давайте рассмотрим шаг за шагом:

  1. Вы фактически не вычитаете массив из указателя, но указатель из указателя:
    Почти во всех контекстах массив распадается на указатель на свой первый элемент.

  2. Каким типом отличается различие двух указателей (которое определяется только в том случае, если они указывают на элементы или находятся непосредственно за элементами одного и того же массива)?

    ptrdiff_t (Вот что это typedef в <stddef.h> для.)

  3. ptrdiff_t может случиться int, но не зависит от этого.
    Вместо этого используйте правильный спецификатор формата: %ti,

4

Другие решения

Имена массивов распадаются на указатели (в большинстве случаев) на его первый элемент. Вычитание двух указателей дает данные ptrdiff_t тип, при условии, что обе точки указывают на элементы одного массива.

0

Вы смотрите на одну из странностей C / C ++ и указателей. Синтаксис и семантика указателей и массивов — просто чокнутые.

str — указатель на символ (а также массив).
pch также является указателем на символ.

Если вы вычли два указателя одного типа, вы получите количество элементов между ними.

Вы даже можете сделать

    3 [str] ;

что эквивалентно

   str[3] ;

и эквивалентно

   *(str+3) ;

Ваше выражение:

  pch - 1

имеет указатель типа на символ. Ваше выражение

  pch - str

имеет тип int.

-2
По вопросам рекламы [email protected]