🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #308775

Re: Pytanko dotyczące C/C++

#308775
From: Mateusz Viste
Date: Thu, 04 Aug 2016 09:30
56 lines
2665 bytes
On 04/08/2016 09:58, stchebel@gmail.com wrote:
> 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);
>
> Nie chodzi mi o "void". Chodzi mi o umiejscowienie gwiazdek. Aha!! I jak następnie prawidłowo wywoływać tą funkcję z pewną zmienną o zadanej wartości.

Na pierwsze dwa pytania już odpowiedziałem na pierwotne zapytanie na 
pl.misc.elektronika, dodam tylko komentarz do:

 > Jakaś_Tam_Zmienna może być dowolnego typu. Całkowita, rzeczywista,
 > zespolona, bitmapa, cokolwiek..

Jak już Tomasz zauważył, to bardzo zła praktyka. Jeśli jednak naprawdę 
nie ma innego wyjścia, to można ew. kombinować tak, licząc się z tym że 
prędzej czy póżniej to się zemści:

#include <stdio.h>

void f(void *x) {
   short *xshort;
   long *xlong;
   char *xstring;
   xshort = x;
   xlong = x;
   xstring = x;
   printf("short : %d\n", *xshort);
   printf("long  : %ld\n", *xlong);
   printf("string: '%s'\n", xstring);
}

int main(void) {
   long x;
   x = 999999;
   f(&x);
   return(0);
}

Uruchomienie:

mateusz@mateusz:~> ./test
short : 16959
long  : 999999
string: '?B'

Tłumaczenie: "void *" oznacza "wskaźnik jakiegokolwiek typu". C 
potrzebuje znać typ, a typem jest tu wskaźnik, więc wszystko gra. A w co 
ten wskaźnik kieruje to już można sobie potem interpretować na wszelaki 
sposób.

Ja sam nigdy nie użyłbym takiej konstrukcji, powyższe podaję raczej jako 
ciekawostkę. Prawidłowa odpowiedź to "należy deklarować typy zgodnie z 
ich przeznaczeniem".


Mateusz
Technical Details
Message-ID: <57a30b27$0$3327$426a74cc@news.free.fr>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!feeder1-2.proxad.net!proxad.net!feeder2-2.proxad.net!cleanfeed4-a.proxad.net!nnrp4-1.free.fr!not-for-mail
References: <4069150b-d97c-4c69-ac7e-b46f61454c32@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!feeder1-2.proxad.net!proxad.net!feeder2-2.proxad.net!cleanfeed4-a.proxad.net!nnrp4-1.free.fr!not-for-mail
Subject: Re: Pytanko dotyczące C/C++
Newsgroups: pl.comp.lang.c
References: <4069150b-d97c-4c69-ac7e-b46f61454c32@googlegroups.com>
From: Mateusz Viste <mateusz.viste@localhost>
Date: Thu, 4 Aug 2016 11:30:31 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2
MIME-Version: 1.0
In-Reply-To: <4069150b-d97c-4c69-ac7e-b46f61454c32@googlegroups.com>
Lines: 57
Message-ID: <57a30b27$0$3327$426a74cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 04 Aug 2016 11:30:17 CEST
NNTP-Posting-Host: 130.255.21.141
X-Trace: 1470303017 news-3.free.fr 3327 130.255.21.141:56774
X-Complaints-To: abuse@proxad.net
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit