Страница 244 из 386

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

Добавлено: Ср дек 21, 2016 10:58:05
Аlex
Правильно.
У указателя нет своего типа, у указателя есть тип, на который он ссылается. Т.к. компилятору нужно знать с какими данными работать по этому указателю.

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

Добавлено: Ср дек 21, 2016 11:18:50
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-ы.

При такой записи лучше объявлять переменные-указатели каждый на своей строке.

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

Добавлено: Ср дек 21, 2016 15:04:34
Zhuk72
Alex, WiseLord, ptr128, ARV - большое спасибо за участие и разъяснения!



Дальнейший разговор на общие темы сюда перенес.
http://radiokot.ru/forum/viewtopic.php?f=17&t=139750
aen

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

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

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

Добавлено: Пт дек 23, 2016 09:55:16
Z_h_e
ARV писал(а):на Си можно написать: for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2); и это не будет ошибкой
Наверное 3DC будет ошибкой или я путаю что-то?

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

Добавлено: Пт дек 23, 2016 10:28:53
ARV
Z_h_e писал(а):3DC будет ошибкой или я путаю что-то
да, запятая пропущена :))) спасибо - исправил

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

Добавлено: Пт дек 23, 2016 10:37:52
Z_h_e
Ну пипец, тогда :)) . А я то думал это должно было быть 0x3DC

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

Добавлено: Пт дек 23, 2016 10:43:02
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);
}

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

Добавлено: Пт дек 23, 2016 11:27:31
WiseLord
Разобраться бы ещё с тем, что такое P и R.

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

Добавлено: Пт дек 23, 2016 11:55:27
Z_h_e
Наверное это какая-то структура объявленная где-то ранее. DC видимо тоже переменная.

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

Добавлено: Пт дек 23, 2016 12:19:58
ARV
меня раскритиковали :))) пришлось убрать всё сообщение

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

Добавлено: Пт дек 23, 2016 12:38:04
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 :)

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

Добавлено: Пт дек 23, 2016 12:52:42
ARV
Reflector писал(а):Да, у тебя там еще e- было, это тоже error
вот вам делать нефига :)))
исключительно ради вас - сменил подпись :)))

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

Добавлено: Пт янв 13, 2017 09:57:51
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 );

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

Добавлено: Пт янв 13, 2017 10:44:15
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 );
Так пойдет?

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

Добавлено: Пт янв 13, 2017 10:55:28
Аlex
FreshMan писал(а):как можна сократить данный код ?
Что значит "сократить" ?
Можно его удалить, тогда он сократиться до нуля :)
Поподробнее описывайте задачи, тут всё-таки не экстрасенсы.

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

Добавлено: Пт янв 13, 2017 11:07:48
Reflector
FreshMan писал(а):как можна сократить данный код ?

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

do
{
   fprintf( p_file, "0x%02X,", sin_table[i] );
   if((i & 0x1F) == 0x1F) fprintf(p_file, "\n");
} while(++i);

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

Добавлено: Пт янв 13, 2017 11:34:46
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++;
}

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

Добавлено: Пт янв 13, 2017 12:54:03
просто КОТ

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

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:

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

Добавлено: Пт янв 13, 2017 13:21:16
WiseLord
Ещё вариант:

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

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