Еще вопросы?Автор оригинала: cDLEON
...
char *str2,*str3,*str4;Код:void func(char *str) { [code]Функция которая ничего не возвращает (void), принимает переменную в которой содержиться адрес на первый символ строки
*str2=++*str;Код:Объявляем что у нас есть три переменные с кривыми названиями (вообще-то при объявлении стоит сразу инициализировать)
*str3=*(str+2);Код:приоритет у '*' и '++' одинаковый приоритет. У '=' меньше. Сначала мы разыменовываем str2 (в левой части у нас указатель фиг знает на что - str2 никогда не был инициализирован и может указывать хоть на Билл Гейтса). Потом производиться увеличение по указателю str. Сначала вычисляется *str - это 'a'. 'a' - это литерал, значение, но не переменная, у нее нет адреса в памяти. Потом мы делаем ++'a'. Но '++' хочет увеличить переменную на 1, а 'a' не переменная как мы помним. Ну после всего этого осталось лишь присвоить правую часть левой.
*str4=*str3-*str2;Код:Сначала мы разыменовываем str3 (указывает на Билла Гейтса, как мы помним). Затем присваем куску памяти с Биллом Гейтсом 3 символ исходной строки (первый - str, второй str + 1)
printf("%p",str4);Код:Сначала мы разыменовываем str4 (на Билла Гейтса). Присваем Биллу разницу char на которые указывают str3 и str2
}Код:ну тут просто печатаем str в представлении для указателя (обычно, это шестнадцатиричнаяя запись с лидирующими ноликами)
template<class T>
struct all_t{
public:
T& container;
all_t(T& toFill)
: container(toFill)
{
}
};
template<class T>
all_t<T> All(T& toFill){
return all_t<T>(toFill);
}
template<class T>
ostream& operator << (ostream& os, all_t<T> wraped){
for(T::const_iterator it = wraped.container.begin(); it != wraped.container.end(); ++it){
os.width(4);
os << right << *it << ' ';
}
return os;
}
многие прооекты на сях живут... пхп, аппач, гникс, лигхташтипипихотя фиг его знает зачем Си може понадобиться
void
test(char *str) {
char tmp;
int i=0;
while(*str) {
i++;
//Здесь присваиваем переменной тмп присваиваем символ,
//на который сейчас указывает указатель стр. Там же всё это дело и обваливается.
tmp=*str;
printf("%s %s %i\n",str,tmp,i);
*str++;
}
}
int
main () {
char *str="Asdddddddddddddd";
test(str);
getch();
return 0;
};
Что ты хочешь сделать этой строчкой?*str++;
Стоп. А почему увеличиваем не указатель на 1, а хз чо ?++str
Во. Теперь понятно)что такое %s - это значит что аргумент у нас строка. то есть указатель, char *
Хороший совет...Только где бы найти мануал в стиле ПХПшного...Перерыл весь поисковик. Сплошной хлам.посмотри в мануале на printf, как задать вывод char.
#include <stdio.h>
int main(int argc, char **argv)
{
...
}
#include <stdio.h>
#include <assert.h>
int main(int argc, char **argv)
{
assert(2==argc);
printf("%s\n",str_reverse(argv[1]));
return 0;
}