RTV forum PL | NewsGroups PL

Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

Pytanko dotyczące C/C++

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

Goto page Previous  1, 2, 3, 4  Next

PcmOl
Guest

Fri Aug 05, 2016 6:33 pm   



Quote:
... Tymczasem w C, możesz zadeklarować nazwę zmiennej gdzie popadnie. Nawet
zmienną sterującej pętli wewnątrz pętli!! for(int i.. i tak dalej) . BURDEL jak
cholera !! Hahh!! Jest też w C jakiś tam zapis(jednolinijkowy), którego treść
jest taka: Jeżeli a<b, to zrób "A", jeżeli a=b, to zrób "B", jeżeli a>b, to
zrób "C". Nie pamiętam dokładnie tej składni, ale jest coś takiego w C, i jest
to bardziej pojebane niż zapis całej tej procedury w Assemblerze.

Nędznej baletnicy wadzi rąbek przy spódnicy. Very Happy

Ghost
Guest

Fri Aug 05, 2016 6:38 pm   



Użytkownik napisał w wiadomości grup
dyskusyjnych:39b0c5dd-d991-47a9-92b3-5de0e5b51dab@googlegroups.com...

Quote:
Jeżeli a<b, to zrób "A", jeżeli a=b, to zrób "B", jeżeli a>b, to zrób "C".
Nie pamiętam dokładnie tej składni, ale jest coś takiego w C,

nie ma - trzeba poskładać z wielu wyrażeń, ale tego rodzaju syfiate
składanki zrobię ci w dowolnym języku

J.F.
Guest

Fri Aug 05, 2016 7:26 pm   



Użytkownik "Ghost" napisał w wiadomości grup
dyskusyjnych:57a4da2f$0$15194$65785112@news.neostrada.pl...
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
Quote:
To tylko pomoc dla programisty i chyba
nie ma innych przypadków gdzie położenie gwiazdki coś zmienia.
W c? Np. w przypadku dzielenia.

dla deklaracji
int *y;


a=4 /* y;
vs
a=4 / *y;

Quote:
widać różnicę?

No widac. Choc jeszcze mamy a=4 /*y; i a=4/*y;

Hm, a jak to bedzie, jesli *y bedzie zdefiniowane przez #define ?
No, jak bedzie prawidlowo zdefiniowane, tzn (*y) czy (*(y)), to dobrze
bedzie :-)

J.

Mateusz Viste
Guest

Fri Aug 05, 2016 7:29 pm   



On 05/08/2016 20:38, Ghost wrote:
Quote:
Użytkownik napisał w wiadomości grup
dyskusyjnych:39b0c5dd-d991-47a9-92b3-5de0e5b51dab@googlegroups.com...

Jeżeli a<b, to zrób "A", jeżeli a=b, to zrób "B", jeżeli a>b, to zrób
"C". Nie pamiętam dokładnie tej składni, ale jest coś takiego w C,

nie ma - trzeba poskładać z wielu wyrażeń, ale tego rodzaju syfiate
składanki zrobię ci w dowolnym języku

Domyślam się, że OP miał na myśli tego typu konstrukcję:

unsigned short a = 2;
printf("%s\n", a > 0 ? "liczba dodatnia" : "zero");

Co prawda nie odpowiada dokładnie opisowi, ale z reguły właśnie na to
skarżą się nowicjusze zanim zrozumieją w jakich sytuacjach to się bardzo
przydaje.

Mateusz

Ghost
Guest

Fri Aug 05, 2016 8:17 pm   



Użytkownik "J.F." napisał w wiadomości grup
dyskusyjnych:57a4e880$0$12543$65785112@news.neostrada.pl...

Użytkownik "Ghost" napisał w wiadomości grup
dyskusyjnych:57a4da2f$0$15194$65785112@news.neostrada.pl...
Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
Quote:
To tylko pomoc dla programisty i chyba
nie ma innych przypadków gdzie położenie gwiazdki coś zmienia.
W c? Np. w przypadku dzielenia.

dla deklaracji

int *y;

a=4 /* y;
vs
a=4 / *y;

widać różnicę?

No widac. Choc jeszcze mamy a=4 /*y; i a=4/*y;

oraz np.
a = 4 / *y

czy to cos zmienia, czy znów się nudzisz?

Ghost
Guest

Fri Aug 05, 2016 8:47 pm   



Użytkownik "Mateusz Viste" napisał w wiadomości grup
dyskusyjnych:57a4e8f0$0$5258$426a74cc@news.free.fr...

On 05/08/2016 20:38, Ghost wrote:
Quote:
Użytkownik napisał w wiadomości grup
dyskusyjnych:39b0c5dd-d991-47a9-92b3-5de0e5b51dab@googlegroups.com...

Jeżeli a<b, to zrób "A", jeżeli a=b, to zrób "B", jeżeli a>b, to zrób
"C". Nie pamiętam dokładnie tej składni, ale jest coś takiego w C,

nie ma - trzeba poskładać z wielu wyrażeń, ale tego rodzaju syfiate
składanki zrobię ci w dowolnym języku

Domyślam się, że OP miał na myśli tego typu konstrukcję:

unsigned short a = 2;
printf("%s\n", a > 0 ? "liczba dodatnia" : "zero");

raczej

a<b?A():a=b?B():a>b?C()

Grzegorz Niemirowski
Guest

Fri Aug 05, 2016 9:13 pm   



Ghost <na@drzewo.pl> napisał(a):
Quote:
Poproszę przykład.
dla deklaracji
int *y;
a=4 /* y;
vs
a=4 / *y;
widać różnicę?

Widać, aczkolwiek dla mnie jest to przykład dosyć abstrakcyjny. Nie
pamiętam, żebym się z takim przypadkiem spotkał. Co innego deklaracje kilku
zmiennych w jednej linijce.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 9 days, 23 hours, 48 minutes and 54 seconds

Ghost
Guest

Sat Aug 06, 2016 5:10 am   



Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
dyskusyjnych:no2vii$2t8$1@node1.news.atman.pl...

Ghost <na@drzewo.pl> napisał(a):
Quote:
Poproszę przykład.
dla deklaracji
int *y;
a=4 /* y;
vs
a=4 / *y;
widać różnicę?

Widać, aczkolwiek dla mnie jest to przykład dosyć abstrakcyjny. Nie
pamiętam, żebym się z takim przypadkiem spotkał. Co innego deklaracje kilku
zmiennych w jednej linijce.

Nigdy nie dzieliłeś? Czy nie dzieliłeś przez wartość wskazywaną?

slawek
Guest

Sat Aug 06, 2016 6:55 am   



On Thu, 4 Aug 2016 09:53:17 +0200, ajt <ajt@ajtbeztego.com.pl> wrote:
Quote:
Umiejscowienie nie ma żadnego znaczenia, wszystkie trzy przykłady

równoważne, pominąłeś jeszcze typ*zmienna, to również to samo.

Są takie same dla kompilatora (jeżeli kompilator jest kompilatorem
C/C++).

Nie są takie same z punktu widzenia filozofii programowania: gwiazdka
przyklejona do typu tworzy jakby nowy typ, gwiazdka przyklejona do
zmiennej modyfikuje sposób traktowania zmiennej. Nie w sensie
standardu, ale w sensie skojarzeń w mózgu programisty.

Nota bene...

Jeżeli ktoś napisze definicję:

int* a,b;

to jest to to samo co

int *a;
int b;

a nie jak mogłobysię

int *a;
int *b;

slawek
Guest

Sat Aug 06, 2016 6:58 am   



On Thu, 4 Aug 2016 10:47:24 +0200, "Ghost" <na@drzewo.pl> wrote:
Quote:
dlatego należy trzymać gwiazdki przy zmiennych

Należy każda zmienną definiować /deklarować w osobnej
linii/instrukcji. Oraz używać typedef.

Grzegorz Niemirowski
Guest

Sat Aug 06, 2016 8:32 am   



Ghost <na@drzewo.pl> napisał(a):
Quote:
Nigdy nie dzieliłeś? Czy nie dzieliłeś przez wartość wskazywaną?

Przez wskazywaną Smile Jeśli dostałbym w funkcji wskaźnik na zmienną liczbową,
to stworzyłbym sobie lokalną zmienną, którą bym zainicjował wartością
wskazywaną przez ten wskaźnik i operacje matematyczne robiłbym właśnie na
tej zmiennej lokalnej zamiast ciągle wyłuskiwać. Chyba że ten wskaźnik
miałby się ciągle przesuwać, to wtedy pewnie nie, ale wówczas gdybym miał
użyć zapisu typu a / * b to bym użył nawiasów: a / (*b), bo inaczej taki
zapis wydawałby mi się nieczytelny, niezależnie od tego gdzie ile spacji bym
wsadził :)

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 10 days, 10 hours, 52 minutes and 9 seconds

Ghost
Guest

Sat Aug 06, 2016 1:42 pm   



Użytkownik "Grzegorz Niemirowski" napisał w wiadomości grup
dyskusyjnych:no47al$8mr$1@node1.news.atman.pl...

Ghost <na@drzewo.pl> napisał(a):
Quote:
Nigdy nie dzieliłeś? Czy nie dzieliłeś przez wartość wskazywaną?

Przez wskazywaną Smile Jeśli dostałbym w funkcji wskaźnik na zmienną liczbową,
to stworzyłbym sobie lokalną zmienną, którą bym zainicjował wartością
wskazywaną przez ten wskaźnik i operacje matematyczne robiłbym właśnie na
tej zmiennej lokalnej zamiast ciągle wyłuskiwać. Chyba że ten wskaźnik
miałby się ciągle przesuwać, to wtedy pewnie nie, ale wówczas gdybym miał
użyć zapisu typu a / * b to bym użył nawiasów: a / (*b), bo inaczej taki
zapis wydawałby mi się nieczytelny, niezależnie od tego gdzie ile spacji
bym wsadził Smile

bym bym bym a potem w kodzie widzi sie cos innego Smile

J.F.
Guest

Sun Aug 07, 2016 9:40 am   



Dnia Fri, 5 Aug 2016 22:17:35 +0200, Ghost napisał(a):
Quote:
Użytkownik "J.F." napisał w wiadomości grup
Użytkownik "Ghost" napisał w wiadomości grup
int *y;
a=4 /* y;
vs
a=4 / *y;

widać różnicę?

No widac. Choc jeszcze mamy a=4 /*y; i a=4/*y;

oraz np.
a = 4 / *y

czy to cos zmienia, czy znów się nudzisz?

prawde mowiac to nie wpadlbym na to, aby wpisac
4 /* y;

Po co ? Gwiazdke trzymamy razem ze wskaznikiem.

Ale calosc moglaby mnie zaskoczyc.


J.

Mario
Guest

Mon Aug 08, 2016 9:59 am   



W dniu 04.08.2016 o 09:24, stchebel@gmail.com pisze:
Quote:
W dniu czwartek, 4 sierpnia 2016 08:22:09 UTC+2 użytkownik Mateusz Viste napisał:
On 04/08/2016 08:09, stchebel@gmail.com wrote:
Może trochę NTG, ale chyba prędzej tutaj uzyskam konkretną odpowiedź, niż na grupie "BOGÓW" od C/C++. Jak wiecie, mam trochę wstręta do C, ale nie w tym rzecz. Prośba: Napiszcie mi w kilku "żołnierskich" słowach jaka jest różnica/jak to interpretować:

1) void Jakaś_Tam_Funkcja(int* Jakaś_Tam_Zmienna);
2) void Jakaś_Tam_Funkcja(int *Jakaś_Tam_Zmienna);
3) void Jakaś_Tam_Funkcja(int * Jakaś_Tam_Zmienna);

Różnica: żadna. Wszystkie trzy prototypy są jednoznaczne, i deklarują
funkcję która nic nie zwraca, a która jako parametr oczekuje wskaźnika
do inta - a czym jest int, to już zależy od platformy - ANSI mówi tylko
że ma mieć co najmniej 16 bitów.

Temat bardziej na pl.comp.lang.c swoją drogą (a tamtejsi "bogowie" wcale
nie gryzą!).


===========

Nie chodzi mi o "void". To akurat jest zrozumiałe. Chodzi mi o umiejscowienie "*" w deklaracji zmiennej wejściowej. (typ* zmienna, typ *zmienna, typ * zmienna). A co się tyczy "bogów" z pl.comp.lang.c, to niestety z Bogiem nie pogadasz. Kiedyś wdałem się tam w dyskusję dot. składni C vs. Pascal. Na dobrą sprawę, "filozofia" obu języków jest IDENTYCZNA !!

Wchodzisz też na grupę pl.comp.os.linux, z tezą że Windows jest tak samo
sensownie zbudowany jak Linux? Albo do ulubionej knajpki kibiców Wisły,
aby ich uświadamiać, że Cracovia to tez fajny klub?

Pozdrawiam
MD

slawek
Guest

Mon Aug 08, 2016 1:18 pm   



On Mon, 8 Aug 2016 11:59:42 +0200, Mario <Mario@w.pl> wrote:
Quote:
Wchodzisz też na grupę pl.comp.os.linux, z tezą że Windows jest tak
samo
sensownie zbudowany jak Linux? Albo do ulubionej knajpki kibiców
Wisły,
aby ich uświadamiać, że Cracovia to tez fajny klub?

Nota bene, kibice Wisły i Cracovii postanowili się pojednać. Zdziebko
szokujące, ale jednak. Gdy umarł JP2.

Profesjonalizm w użyciu C/C++/czegokolwiek to nie bycie fanem
hejtujacym wszystko co nie jest C/C++/czymkolwiek. Akurat sposób
przekazywania parametrów w C jest niezbyt doskonały. W szczególności:
złym pomysłem są tzw. parametry wyjściowe (dziedzictwo po Fortranie
itp.) - pod tym względem Java jest dużo bardziej ogarnięta. Choć to
pytanie może wydawać się dziwne, to czy znasz klarowną odpowiedź:
dlaczego tyle papieru itp. potrzebne jest na tłumaczenie czym są typy
zmiennych i wskaźniki w C... choć celem nie jest napisanie sonetu w
n-tysięcy LOC, a jedynie zrobienie czegoś trywialnego (jakieś LED w
Arduino, obliczenie CRC, interpolacja najbliższą wartością z
tablicy...)???

Czy zamiast medytacji nad C nie lepiej po prostu użyć czegoś bardziej?

I z góry uprzedzam: da się. Patrz Python i nie tylko.

Nawet w C da się #define a (*aptr)

Potem można pisać

int fun(int a)
{
return 1000 / a;
}

Bez potrzeby męczenia się z *a i dziwadłami w rodzaju 1000 / *a

Goto page Previous  1, 2, 3, 4  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Różnice w znakach wskaźników w definicji funkcji w C/C++ - które wybrać?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map