Почему арифметика указателя работает между int * & amp; int * только для минусов, а не для плюса? [Дубликат]

Другие ответы превосходны, и я просто хочу дать прямой ответ на этот вопрос. Просто ограничение асинхронных вызовов jQuery

Все вызовы ajax (включая $.get или $.post или $.ajax) асинхронны.

Учитывая ваш пример

var outerScopeVar;  //line 1
$.post('loldog', function(response) {  //line 2
    outerScopeVar = response;
});
alert(outerScopeVar);  //line 3

Выполнение кода начинается с строки 1, объявляет переменную и триггеры и асинхронный вызов в строке 2 (т. е. пост-запрос), и продолжает выполнение из строки 3, не дожидаясь, когда почтовый запрос завершит выполнение .

Допустим, что запрос на отправку занимает 10 секунд, значение outerScopeVar будет установлено только после этих 10 секунд.

Чтобы попробовать,

var outerScopeVar; //line 1
$.post('loldog', function(response) {  //line 2, takes 10 seconds to complete
    outerScopeVar = response;
});
alert("Lets wait for some time here! Waiting is fun");  //line 3
alert(outerScopeVar);  //line 4

Теперь, когда вы выполните это, вы получите предупреждение в строке 3. Теперь подождите некоторое время, пока не убедитесь, что почтовый запрос вернул некоторое значение. Затем, когда вы нажмете «ОК», в окне предупреждения следующее предупреждение выведет ожидаемое значение, потому что вы его ждали.

В сценарии реальной жизни код становится,

var outerScopeVar;
$.post('loldog', function(response) {
    outerScopeVar = response;
    alert(outerScopeVar);
});

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

11
задан vignesh babu 4 September 2014 в 15:05
поделиться

3 ответа

Указатели содержат адреса. Добавление двух адресов не имеет смысла, потому что вы не представляете, что бы вы указали. Вычитание двух адресов позволяет вам вычислить смещение между этими двумя адресами, что может быть очень полезно в некоторых ситуациях.

Редактирование: для решения общего желания найти середину рассмотрим это (просто как пример):

#include <stdio.h>
int main (int argc, char **argv){
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int *ptr_begin = arr;
    int *ptr_end = &arr[9];
    int *ptr_mid = ptr_begin + (ptr_end - ptr_begin)/2;
    printf("%d\n", *ptr_mid);
}

Я абсолютно уверен, что вы всегда можете придумать смещение-вычисление, которое позволяет делать то, что вы хотите достичь с добавлением.

21
ответ дан midor 25 August 2018 в 04:15
поделиться

Чтобы ясно сказать, разница между двумя указателями дает количество элементов типа, которые могут быть сохранены между двумя указателями, но добавление их не дает каких-либо значимых функциональных возможностей. Если нет значимых функций, то не имеет смысла, что он не поддерживается.

0
ответ дан DevonHorizon 25 August 2018 в 04:15
поделиться

На самом деле может быть полезно добавление двух адресов. Возможно, вам понадобится знать средний адрес между двумя адресами, например (a + b) / 2 (для парня, который хочет думать о указателях как номерах дома, это даст ему номер дома посередине между двумя домами), я думаю, что добавление двух адресов должно быть разрешено, потому что вы можете это сделать в любом случае с помощью прикладов:

int *ptr,*ptr1;
int sum = (int)ptr + (int)ptr1;

EDIT: Я не говорю, что использование добавление адресов является обязательным в некоторых случаях, но может быть полезно, когда мы знаем, как его использовать.

-1
ответ дан Othman Benchekroun 25 August 2018 в 04:15
поделиться
Другие вопросы по тегам:

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