Как printf обрабатывает свои аргументы?

Вы можете установить TextWatcher для своего окна поиска и изменить свой курсор на onTextChanged () на TextWatcher, например, коды ниже:

TextWatcher filterNameTextWatcher = new TextWatcher()
 public void beforeTextChanged(CharSequence s, int start, int count,int after)
        {
        }

        public void onTextChanged(CharSequence s,int start, int before,int count) 
        {
            Cursor FilteredNameList = ZoneCardDBAdapter.instance.CursorFilteredName(s.toString());
            Listadapter.changeCursor(FilteredNameList);


        }

        @Override
        public void afterTextChanged(Editable arg0) 
        {   
        }
    };

EditText filterTextName = (EditText)this.findViewById(R.id.edtZoneCardNameFilter);
filterTextCPName.addTextChangedListener(filterNameTextWatcher);
16
задан Wok 24 September 2010 в 21:13
поделиться

4 ответа

Такая функция называется вариационной функцией . Вы можете объявить его в C, используя ..., например:

int f(int, ... );

Затем вы можете использовать va_start , va_arg и va_end для работы со списком аргументов. Вот пример:

#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>

void f(void);

main(){
        f();
}

int maxof(int n_args, ...){
        register int i;
        int max, a;
        va_list ap;

        va_start(ap, n_args);
        max = va_arg(ap, int);
        for(i = 2; i <= n_args; i++) {
            if((a = va_arg(ap, int)) > max)
                max = a;
        }

        va_end(ap);
        return max;
}

void f(void) {
        int i = 5;
        int j[256];
        j[42] = 24;
        printf("%d\n",maxof(3, i, j[42], 0));
}

Для получения дополнительной информации см. The C Book и stdarg.h .

18
ответ дан 30 November 2019 в 15:51
поделиться

Эта функция называется Переменное количество аргументов в функции . Вы должны включить заголовочный файл stdarg.h ; затем используйте функции типа va_list и va_start , va_arg и va_end в теле вашей функции:

void print_arguments(int number_of_arguments, ...)
{
  va_list list;
  va_start(list, number_of_arguments);
  printf("I am first element of the list: %d \n", va_arg(list, int));
  printf("I am second element of the list: %d \n", va_arg(list, int));
  printf("I am third element of the list: %d \n", va_arg(list, int));
  va_end(list);
}

Затем вызовите вашу функцию вроде этого:

print_arguments(3,1,2,3);

, который распечатает следующее:

    I am first element of the list: 1
    I am second element of the list: 2
    I am third element of the list: 3
9
ответ дан 30 November 2019 в 15:51
поделиться

Способ, которым это делается в C, называется "varargs". Здесь есть руководство по этому поводу: http://c-faq.com/~scs/cclass/int/sx11b.html

8
ответ дан 30 November 2019 в 15:51
поделиться

Как уже говорили другие, printf для работы использует va_args. Это довольно крутое упражнение - написать свою собственную версию printf, по крайней мере, для проверки того, что printf, в отличие от Writeln Паскаля, не является магией компилятора. После того, как вы это сделаете, вы должны уйти от этого. Вот статья в блоге , которую я написал, в которой подробно объясняется, почему (краткий ответ - вы можете создавать ошибки, которые могут оставаться незамеченными в течение длительного времени).

7
ответ дан 30 November 2019 в 15:51
поделиться
Другие вопросы по тегам:

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