webForumDet fria alternativet

Låta pekare peka till funktion?

C/C++

6 svar · 336 visningar · startad av Mattias

Medlem sedan mars 2000205 inlägg
Frågan#1

Jag har problem med att låta en pekare peka på en funktion i C. Har skrivit nedanstående kod som känns rätt, men uppenbarligen är den inte det eftersom jag (vid kompilering) får felmeddelandet: "warning: assignment from incompatible pointer type" på raden där pekaren tilldelas funktionen (se nedan).

// relevanta delar av funktionen
char *skapa_nyckel_alt1(int index, struct film arr[]){
  char *nyckel_pek;
...
  return nyckel_pek;
...
}
 // pekardeklartion
char (*fpek)(int, struct film);
// pekaren tilldelas funktionen (raden med felmeddelandet)
fpek = (char*) skapa_nyckel_alt1;

Någon som kan vägleda mig hur man går tillväga för att låta pekaren peka till funktionen?

Medlem sedan feb. 20002 300 inlägg
#2
fpek = (char*) skapa_nyckel_alt1;

Här ovanför försöker du casta funktionen till en char-pekare och sen tilldela fpek det värdet.

fpek = skapa_nyckel_alt1;

Borde fungera utmärkt. :)

Ett litet tips: http://www.function-pointer.org/ ;) :bire

Medlem sedan mars 2000205 inlägg
#3

Nej, det fungerar inte. Känns som jag testat alla kombinationer av stjärnor här och där på den raden. ;) Misstänker att det är nåt fel i själva deklarationen av fpek-pekaren. Funktionen returnerar ju ingen char, utan en _pekare_ till en char. Men mitt chansningsrace har inte heller gett nån utdelning på deklartionsraden. ;)

Medlem sedan feb. 20002 300 inlägg
#4

Ahh.. Sorry.

Det här borde fungera:

// pekardeklaration
char* (*fpek)(int, struct film);

fpek = skapa_nyckel_alt1;

:)

Medlem sedan mars 2000205 inlägg
#5

Nej, tyvärr fick jag återigen "warning: assignment from incompatible pointer type" på raden:

fpek = skapa_nyckel_alt1;
Medlem sedan feb. 20002 300 inlägg
#6

Hmm... Konstigt. Det fungerar utmärkt för mig. Visual Studio 6.0 SP3


#include <stdio.h>
#include <stdlib.h>

// relevanta delar av funktionen
char *skapa_nyckel_alt1(char character)
{
	char *nyckel_pek = (char *)malloc(sizeof(char));
	*nyckel_pek = character;
	
	return nyckel_pek;
}

int main(void)
{

	char *foo;
	char* (*fpek)(char);

	fpek = skapa_nyckel_alt1;

	foo = fpek('A');

	printf("\n%c\n", *foo);

	free(foo);

	return 0;
}
Medlem sedan mars 2000205 inlägg
#7

Problemet är löst! Felet låg i pekardeklarationen. Istället för:

char* (*fpek)(int, struct film);

...skrev jag:

char* (*fpek)(int, struct film[]);

Det var alltså hakparentesen efter film som jag missat Slarvigt. Tack för vägledningen, Phorpher!

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)