следующий кодопределяющие True/False
#include <iostream>
using namespace std;
int main(){
char greeting[50] = "goodmorning everyone";
char *s1 = greeting;
char *s2 = &greeting[7];
bool test = s2-s1;
cout << "s1 is: " << s1 << endl;
cout << "s2 is: " << s2 << endl;
if (test == true){
cout << "test is true and is: " << test << endl;
}
if (test == false){
cout<< "test is false and is: " << test << endl;
}
return 0;
}
выходы:
s1 is: goodmorning everyone
s2 is: ning everyone
test is true and is: 1
здесь, что делает линию bool test = s2-s1;
на самом деле оценить ?, является его длина строки ?. Если да, то видя, что s2 меньше, чем s1, он должен быть отрицательным правильным ?, и все же результат верен ?.
Также, если я изменю его на bool test = s1-s2;
Я все еще получаю тот же результат. Так что не имеет значения, будет ли отрицательный или позитивный он true
? и только false, когда 0 ?.
Что означает s2-s1?
-cheers (пытаясь избавиться от сомнений :))
АХК, а также то, что делает s2-s1 на самом деле оценить? длина строки? – silent
@ sil3nt: Он возвращает разницу между двумя указателями. 's1' и' s2' - только указатели. В этом случае 's2 - s1 = 7', потому что' s2' указывает на седьмой элемент массива char, а 's1 указывает на нулевой элемент (начало) массива char. –
И только для того, чтобы прояснить немного больше, указатели - это целые числа, которые содержат адрес (смещение байта) в ячейку памяти. Поэтому, если вы выполняете арифметику указателей, это действительно делает арифметику с базовыми адресами памяти, которые являются числами. Результатом является другой указатель (целое число), который затем неявно преобразуется в bool и присваивается 'test'. – Cameron