, если вы пишете
int b = 0;
foo(b);
int foo(int a)
{
a = 1;
}
, вы не меняете 'b', потому что a является копией b
, если вы хотите изменить b, вам нужно будет передать адрес из b
int b = 0;
foo(&b);
int foo(int *a)
{
*a = 1;
}
одинаково для указателей:
int* b = 0;
foo(b);
int foo(int* a)
{
a = malloc(10); // here you are just changing
// what the copy of b is pointing to,
// not what b is pointing to
}
, поэтому для изменения, где b указывает, чтобы передать адрес:
int* b = 0;
foo(&b);
int foo(int** a)
{
*a = 1; // here you changing what b is pointing to
}
hth
Для GPL, да. Любой Код/Содержание GPL это компилируется в Ваше Приложение или Пакет, сделает это GPL. (Редактирование: То, что могло быть безопасным, - то, если Значок является отдельным файлом и используется. Это могло быть серой областью, поскольку Вы не используете Код GPL для доступа к ней. Но любая попытка встроить его вызовет Вашу программу к GPL, это - одна из самых строгих лицензий там)
, LGPL прекрасен: Любая модификация к Содержанию LGPL должна быть выпущена под LGPL, но использование Кода безопасно.
Дополнение: Как LGPL, CreativeCommons обычно только влияет на Содержание, которое Вы используете. Таким образом, если Вы используете Значок CC и изменяете его, необходимо будет выделить измененный объект под CreativeCommons, но Приложение не затронуто. Просто возражайте против "Некоммерческого" Пункта, если он существует.
Это - хитрая область, как минимум необходимо, вероятно, принять меры, чтобы значки были загружены во время выполнения так, чтобы они могли быть заменены другими версиями, это - по крайней мере, дух GPL.
статья обсуждает это в http://www.linux.com/feature/119212