Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Правильно.
У указателя нет своего типа, у указателя есть тип, на который он ссылается. Т.к. компилятору нужно знать с какими данными работать по этому указателю.
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

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

Код: Выделить всё

char array[10];
char *ptr;
ptr = array;

char array[10];
char *ptr = array;
будет лучше воспринят, если записать его, приблизив звёздочку к типу:

Код: Выделить всё

char array[10];
char* ptr = array;
Но тут нужно быть осторожным, и не попасться в ловушку вроде:

Код: Выделить всё

char* ptr1, ptr2, ptr3;
Ибо может сложиться впечатление, что тут объявлены три указателя на char, но на самом деле указатель один (ptr1), а (ptr2 и ptr3) - это просто char-ы.

При такой записи лучше объявлять переменные-указатели каждый на своей строке.
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Продолжение боёв по теме _Bool, void и всякой квантовой

Сообщение Zhuk72 »

Alex, WiseLord, ptr128, ARV - большое спасибо за участие и разъяснения!



Дальнейший разговор на общие темы сюда перенес.
http://radiokot.ru/forum/viewtopic.php?f=17&t=139750
aen
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

WiseLord писал(а):лучше объявлять переменные-указатели каждый на своей строке
я бы посоветовал расширить этот подход на объявления любых переменных - каждая в новой строке. ну разве что переменные примитивного назначения можно кучковать, которые не требуют комментариев и пояснений, например, итераторы циклов i,j,k...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы по С/С++ (СИ)

Сообщение Z_h_e »

ARV писал(а):на Си можно написать: for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2); и это не будет ошибкой
Наверное 3DC будет ошибкой или я путаю что-то?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Z_h_e писал(а):3DC будет ошибкой или я путаю что-то
да, запятая пропущена :))) спасибо - исправил
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы по С/С++ (СИ)

Сообщение Z_h_e »

Ну пипец, тогда :)) . А я то думал это должно было быть 0x3DC
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Z_h_e писал(а):Ну пипец, тогда
это не пипец... вот где полный пипец:
Спойлер

Код: Выделить всё

m(f,a,s)char*s;
{char c;return f&1?a!=*s++?m(f,a,s):s[11]:f&2?a!=*s++?1+m(f,a,s):1:f&4?a--?
 putchar(*s),m(f,a,s):a:f&8?*s?m(8,32,(c=m(1,*s++,"Arjan Kenter. \no$../.\""),
 m(4,m(2,*s++,"POCnWAUvBVxRsoqatKJurgXYyDQbzhLwkNjdMTGeIScHFmpliZEf"),&c),s)):
 65:(m(8,34,"rgeQjPruaOnDaPeWrAaPnPrCnOrPaPnPjPrCaPrPnPrPaOrvaPndeOrAnOrPnOrP\
nOaPnPjPaOrPnPrPnPrPtPnPrAaPnBrnnsrnnBaPeOrCnPrOnCaPnOaPnPjPtPnAaPnPrPnPrCaPn\
BrAnxrAnVePrCnBjPrOnvrCnxrAnxrAnsrOnvjPrOnUrOnornnsrnnorOtCnCjPrCtPnCrnnirWtP\
nCjPrCaPnOtPrCnErAnOjPrOnvtPnnrCnNrnnRePjPrPtnrUnnrntPnbtPrAaPnCrnnOrPjPrRtPn\
CaPrWtCnKtPnOtPrBnCjPronCaPrVtPnOtOnAtnrxaPnCjPrqnnaPrtaOrsaPnCtPjPratPnnaPrA\
aPnAaPtPnnaPrvaPnnjPrKtPnWaOrWtOnnaPnWaPrCaPnntOjPrrtOnWanrOtPnCaPnBtCjPrYtOn\
UaOrPnVjPrwtnnxjPrMnBjPrTnUjP"),0);}
 
main(){return m(0,75,"mIWltouQJGsBniKYvTxODAfbUcFzSpMwNCHEgrdLaPkyVRjXeqZh");}

Код: Выделить всё

#include <stdio.h>
main (int t, int _, char *a)
{
return!0<t?t<3?
main(-79,-13,a+main(-87,1-_,main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a) 
:3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72? 
main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\ 
{n+,/+#n+,/# ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!\ 
/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\ 
/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/\ 
w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}\ 
#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") 
:t<-50?_==*a?putchar(31[a]):
main(-65,_,a+1):
main((*a=='/')+t,_,a+1):
0<t?main(2,2,"%s")
:*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry" 
),a+1);
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

Разобраться бы ещё с тем, что такое P и R.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы по С/С++ (СИ)

Сообщение Z_h_e »

Наверное это какая-то структура объявленная где-то ранее. DC видимо тоже переменная.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

меня раскритиковали :))) пришлось убрать всё сообщение
Последний раз редактировалось ARV Пт дек 23, 2016 12:54:04, всего редактировалось 2 раза.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

ARV писал(а):не ломайте голову :)))
1. 3DC может быть корректным и без запятой, например, #define DC 12
2. P - может быть функцией, возвращающей структуру
3. R так же может быть макросом, например, #define R value-
:)))
вот и живите теперь с этим :)))
Проверил на gcc:

Код: Выделить всё

#define DC 12
#define R value-

struct One
{
	int value;
} one;

int a = 3DC;		// error
int b = one.value-;	// eror
int c = one.R-;		// error
Да, у тебя там еще e- было, это тоже error :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Reflector писал(а):Да, у тебя там еще e- было, это тоже error
вот вам делать нефига :)))
исключительно ради вас - сменил подпись :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

как можна сократить данный код ?

Код: Выделить всё

	do{
		fprintf( p_file, "0x%02X,", sin_table[i] );                                                                            // вывод значения массива в файл
	   if( i == 31 || i == 63 || i == 95 || i == 127 || i == 159 || i == 191 || i == 223 || i == 255 ) fprintf(p_file, "\n"); // перевод строки

	} while( ++i != 0 );
Tell Me The Truth
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Zhuk72 »

Код: Выделить всё

  unsigned char k = 0;  
  do
  {
    fprintf( p_file, "0x%02X,", sin_table[i] ); // вывод значения массива в файл
    if ((++k) == 31) {k = 0; fprintf(p_file, "\n");}   // перевод строки
  } while( ++i != 0 );
Так пойдет?
Последний раз редактировалось Zhuk72 Пт янв 13, 2017 11:01:02, всего редактировалось 1 раз.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

FreshMan писал(а):как можна сократить данный код ?
Что значит "сократить" ?
Можно его удалить, тогда он сократиться до нуля :)
Поподробнее описывайте задачи, тут всё-таки не экстрасенсы.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

FreshMan писал(а):как можна сократить данный код ?

Код: Выделить всё

do
{
   fprintf( p_file, "0x%02X,", sin_table[i] );
   if((i & 0x1F) == 0x1F) fprintf(p_file, "\n");
} while(++i);
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

FreshMan писал(а):как можна сократить данный код ?

Код: Выделить всё

#define NUM_COUNT   32

int i = 0;
while(i < sizeof(sin_table)){
   fprintf( p_file, "0x%02X, ", sin_table[i] );
   if(!(i % NUM_COUNT)) fprintf(p_file, "\n");
   i++;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение просто КОТ »

Код: Выделить всё

for (int i = 0; i < sizeof(sin_table); i++) {
   fprintf(p_file, "0x%02X, ", sin_table[i]);
   if(!(i % 32)) fprintf(p_file, "\n");}
Осмелюсь предложить... :roll:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

Ещё вариант:

Код: Выделить всё

do{
  fprintf( p_file, "0x%02X,", sin_table[i] ); 
  if(0x1F == i & 0x1F)
    fprintf(p_file, "\n");
} while(++i != 0);
Ответить

Вернуться в «Разные вопросы по МК»