В чем разница между префиксными и постфиксными операторами?

Если вам абсолютно нужна локальная копия файла, вам нужно будет открыть InputStream копию содержимого в локальный файл, в котором вы знаете путь, а затем перейти оттуда. Sidenote: Guava ByteStreams#copy - это простой способ выполнить это.

Конечно, этот файл больше не поддерживается исходным источником Uri, поэтому я не думаю, что это то, что вы хотите. Вместо этого вы должны работать с API-интерфейсом Uri. Взгляните на Storage Access Framework

Изменить

Вот как вы можете получить InputStream из вашего Uri

InputStream inputStream = getContentResolver().openInputStream(uri);

29
задан Chris Frederick 11 August 2011 в 20:38
поделиться

12 ответов

Префикс:

int a=0;

int b=++a;          // b=1,a=1 

перед присвоением значение будет увеличиваться.

Постфикс:

int a=0;
int b=a++;  // a=1,b=0 

сначала присвойте значение «a» значению «b», а затем увеличьте значение «a»

11
ответ дан Raktim Biswas 11 August 2011 в 20:38
поделиться

На самом деле return (i++) вернет только 10.

Операторы ++ и - могут быть помещены до или после переменной, с различными эффектами. Если они раньше, то они будут обработаны и возвращены и, по существу, будут обрабатываться точно так же, как (i-1) или (i + 1), но если вы поместите ++ или - после i, то возврат будет существенно ниже ]

return i;
i + 1;

Таким образом, он вернет 10 и никогда не будет увеличивать его.

7
ответ дан loganfsmyth 11 August 2011 в 20:38
поделиться

Постфиксный инкремент ++ не увеличивает значение своего операнда до тех пор, пока он не будет оценен. Значение i++ равно i.

Префикс декремента увеличивает значение своего операнда до его оценки. Значение --i равно i - 1.

Увеличение / уменьшение префикса изменяет значение до вычисления выражения. Постфиксный приращение / уменьшение меняет значение после.

Итак, в вашем случае fun(10) возвращает 10, и при печати --i печатается i - 1, что равно 9.

4
ответ дан Rafe Kettler 11 August 2011 в 20:38
поделиться

i ++ - постинкремент. Приращение происходит после того, как значение возвращено.

3
ответ дан Alok Save 11 August 2011 в 20:38
поделиться

Существует большая разница между постфиксной и префиксной версиями ++.

В префиксной версии (то есть, ++i) значение i увеличивается, а значением выражения является новое значение i.

В постфиксной версии (то есть, i++) значение i увеличивается, но значением выражения является первоначальное значение i.

Давайте построчно проанализируем следующий код:

int i = 10;   // (1)
int j = ++i;  // (2)
int k = i++;  // (3)
  1. i установлен в 10 (просто).
  2. В этой строке две вещи:
    • i увеличивается до 11.
    • Новое значение i копируется в j. Итак, j теперь равно 11.
  3. В этой строке также есть две вещи:
    • i увеличивается до 12.
    • Исходное значение i (то есть 11) копируется в k. Итак, k теперь равно 11.

Таким образом, после запуска кода, i будет 12, но j и k будет 11.

То же самое относится и к постфиксным и префиксным версиям --.

50
ответ дан tfmontague 11 August 2011 в 20:38
поделиться

Функция возвращает значение до того, как значение i увеличивается, поскольку вы используете оператор пост-исправления (++). Во всяком случае, приращение i не является глобальным - только для соответствующей функции. Если бы вы использовали оператор предварительной фиксации, он был бы 11, а затем уменьшен до 10.

Таким образом, вы возвращаете i как 10 и уменьшаете его в функции printf, которая показывает 9 не 10, как вы думаете.

10
ответ дан 11 August 2011 в 20:38
поделиться

Есть два примера, иллюстрирующих разницу

int a , b , c = 0 ; 
a = ++c ; 
b = c++ ;
printf (" %d %d %d " , a , b , c++);
  • Здесь c имеет значение 0 c приращением на 1, затем присваивает значение 1 значению so a = 1 и значению c = 1
  • следующее значение присвоения следующего оператора от c = 1 до b, затем увеличить c на 1, так что значение b = 1 и значение c = 2

  • в printf утверждение, что у нас есть c++, это означает, что первоначальное значение c, равное 2, будет напечатано, а затем с приращением c увеличится на 1, поэтому printf оператор выведет 1 1 2, а значение c теперь равно 3

вы можете использовать http://pythontutor.com/c.html

int a , b , c = 0 ; 
a = ++c ; 
b = c++ ;
printf (" %d %d %d " , a , b , ++c);
  • Здесь в printf оператор ++c будет увеличивать значение c на 1 сначала затем назначьте новое значение 3 для c, чтобы оператор printf напечатал 1 1 3
3
ответ дан Abdelrhman Fawzy 11 August 2011 в 20:38
поделиться

Это связано с тем, как работает оператор постинкрементной обработки. Возвращает значение i, а затем увеличивает его.

2
ответ дан Kevin 11 August 2011 в 20:38
поделиться

Во-первых, обратите внимание, что параметр функции с именем i и переменная с именем i в main() являются двумя разными переменными. Я думаю, что это не имеет большого значения для настоящей дискуссии, но важно знать.

Во-вторых, вы используете оператор постинкремента в fun(). Это означает, что результатом выражения является значение до увеличения i; конечное значение 11 из i просто отбрасывается, и функция возвращает 10. Переменной i обратно в main, являющейся другой переменной, присваивается значение 10, которое затем уменьшается, чтобы получить 9.

2
ответ дан Ernest Friedman-Hill 11 August 2011 в 20:38
поделиться

Объяснение:

Шаг 1: int fun(int); Здесь мы объявляем прототип функции fun().

Шаг 2: int i = fun(10); Переменная i объявляется как целочисленный тип, и результат fun(10) будет сохранен в переменной i.

Шаг 3: int fun(int i){ return (i++); } Внутри fun() мы возвращаем значение return(i++). Возвращает 10. потому что i++ является оператором после инсерции.

Шаг 4: Затем управление возвращается к основной функции, и значение 10 присваивается переменной i.

Шаг 5: printf("%d\n", --i); Здесь --i обозначает предварительное слияние. Следовательно, он печатает значение 9.

2
ответ дан Setu Kumar Basak 11 August 2011 в 20:38
поделиться

fun (10) возвращает 10. Если вы хотите, чтобы он возвращал 11, вам нужно использовать ++ i, а не i ++.

int fun(int i)
{
    return ++i;
}
1
ответ дан Jared Burrows 11 August 2011 в 20:38
поделиться

На самом деле, когда вы используете постфикс, то есть i ++, для возврата используется начальное значение i, а не увеличенное. После этого значение i увеличивается на 1. И это происходит с любым оператором, использующим i ++, т. Е. Сначала в выражении используется начальное значение i, а затем оно увеличивается.

И полная противоположность происходит в префиксе. Если бы вы вернули ++ i, то возвращается увеличенное значение, то есть 11, потому что сначала добавляется 1, а затем возвращается.

2
ответ дан Gargee Sanyal 11 August 2011 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: