Указатели на функции в C - PullRequest
4 голосов
/ 25 июля 2011

Почему следующий отпечаток 1. Я ожидал, что он напечатает адрес указателя функции.

#include <stdio.h>

int main(main) {
  printf("%i",main);
  return 0;
}

Ответы [ 6 ]

10 голосов
/ 25 июля 2011

Указатели должны быть напечатаны с %p. В любом случае, здесь есть проблема с псевдонимами, довольно странная, но это все: main получает значение первого аргумента для функции main, то есть то, что обычно называется argc. если вы называете это с большим количеством аргументов, вы должны увидеть большее число.

3 голосов
/ 25 июля 2011

Поскольку первым аргументом функции main программы является количество аргументов (плюс один, поскольку имя программы является первым аргументом) во время выполнения. Предполагая, что вы вызвали вашу программу без аргументов, это значение будет заполнено целым числом.

Многие люди традиционно используют main со следующей подписью:

int main(int argc, char **argv);

Если вы удалите параметр, вы можете получить то, что хотите:

int main() {
    printf("%i", main);
    return 0;
}

Если это не сработает, попробуйте объявить int main(); над определением функции.

Если ЭТО не работает, спросите себя, почему вы делаете это в первую очередь. : -Р

1 голос
/ 25 июля 2011

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

1 голос
/ 25 июля 2011

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

#include <stdio.h>

int main(int main) {
    printf("%i",main);
    return 0;
}

Так что main является первым параметром функции main.Если вызывается без параметров, размер (обычно следующий) массива argv равен 1, argv [0] содержит имя процесса.

1 голос
/ 25 июля 2011

Первый параметр main обычно называется argc, который сообщает, сколько аргументов была запущена программой. Поскольку вы запускаете это без аргументов, значение будет равно 1 (имя исполняемого файла). Если вы запустите это из командной строки с дополнительными аргументами, разделенными пробелами, это число увеличится.

1 голос
/ 25 июля 2011

вы объявили параметр с именем "main" - этот параметр соответствует первому параметру функции main в C, которая в свою очередь обычно называется "argc", которая, в свою очередь, равна 1, еслиВы запускаете свою программу без каких-либо параметров командной строки.

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