Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Matrisberäkningar med för STM32?
Re: Matrisberäkningar med för STM32?
Re: Matrisberäkningar med för STM32?
Okej. Så det kanske därför C är konstruerat så där? Det ska vara optimerat? Men C++ då?hummel skrev:Ofta genererar en pekare mindre kod än att passa en stor datastruktur vid anrop.Al_Bundy skrev:Det är inget fel att hålla koll. Men varför går det inte passera en 2D array igenom en funktion och i funktionen så ska man mäta dimensionen på denna 2D array?AndLi skrev: Det var en annorlunda vinkling av kritiken man hör om C, normalt brukar vara att det just tillåter användaren att göra vad som helst som får kritik för att användaren/programmeraren måste ha full koll för att inte ta sönder något. Men visst kan man inte C så blir det ju svårt att göra det man vill, upplever samma sak med JavaScript, helt värdelöst, det förstår mig inte...
Varför kan inte C returnera flera värden samtidigt?
Varför har dem...medvetet...byggt C på detta vis?
Du får snabbare kod (vilket du efterfrågar) genom pass by reference.
Re: Matrisberäkningar med för STM32?
En funktion i C kan fint skicka tillbaka fmer data än en variabel - man ska bara veta hur.
Vid att ange adressen på en eller fle variabler i parameterlistan TILL funktionen kan den skriva i dom och sedan bara rapportera tillbaka om allt gick bra eller inte - som exempel.
Vid att ange adressen på en eller fle variabler i parameterlistan TILL funktionen kan den skriva i dom och sedan bara rapportera tillbaka om allt gick bra eller inte - som exempel.
Re: Matrisberäkningar med för STM32?
Jag gör det redan. Men jag tycker att C kompilatorn borde förstå att man kanske vill skicka en 2D array rakt ut från en funktion. Ska väll inte vara så svårt att fixa och optimera detta, enligt dem som har skapat språket?
Re: Matrisberäkningar med för STM32?
Jamen, det är ju bara att skicka basadressen på din Array som argument i funktionsanropet.
Lätt som en plätt.
Lätt som en plätt.
Re: Matrisberäkningar med för STM32?
Om man skapar en variabel inne i en funktion så läggs den i en stack-frame. Dessa data förvinner när man lämnar funktionen även om de returneras.
Om man kör med en debugger fattar man sånt här efterhand.
Man tar alltså alltid med en pekare in som pekar på något som inte försvinner.
Om man kör med en debugger fattar man sånt här efterhand.
Man tar alltså alltid med en pekare in som pekar på något som inte försvinner.
Re: Matrisberäkningar med för STM32?
> Känns som om vi kommit en bit ifrån ämnet nu men C har inte pass by reference.
Det håller jag inte med om. Alla pekar argument är per definition en "by reference" till det som pekaren "pekar på".
> Du skickar en pekare by value.
Ja, men det som pekaren pekar på är "by reference".
> Ändrar du pekaren i en underfunktion är den fortfarande oförändrad en nivå upp.
Man ändrar inte pekaren, utan det som pekaren pekar på. D.v.s. det som skickades "by reference".
Om jag anropar en funktion skriven i C från ett Cobol program så kan jag t.ex. skriva:
CALL MY-C-FUNC USING VAR1 BY REFERENCE VAR2 BY REFERENCE GIVING RET-VALUE.
C funktionen kan använda de pekare som den får för att direkt ändra VAR1 och VAR2.
(RET-VALUE får alltså C funktionens returvärde...)
Det håller jag inte med om. Alla pekar argument är per definition en "by reference" till det som pekaren "pekar på".
> Du skickar en pekare by value.
Ja, men det som pekaren pekar på är "by reference".
> Ändrar du pekaren i en underfunktion är den fortfarande oförändrad en nivå upp.
Man ändrar inte pekaren, utan det som pekaren pekar på. D.v.s. det som skickades "by reference".
Om jag anropar en funktion skriven i C från ett Cobol program så kan jag t.ex. skriva:
CALL MY-C-FUNC USING VAR1 BY REFERENCE VAR2 BY REFERENCE GIVING RET-VALUE.
C funktionen kan använda de pekare som den får för att direkt ändra VAR1 och VAR2.
(RET-VALUE får alltså C funktionens returvärde...)
Re: Matrisberäkningar med för STM32?
Varför lägga till något som redan finns?Al_Bundy skrev:Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Och för övrigt uppdateras C standarden löpande, därav K&R C, AnsiC,C99,C11,C18....
Re: Matrisberäkningar med för STM32?
Hur gör du om du har allokerat ett visst minne för 2D arrayen och sedan vill du radera den? Det är det jag har gjort. Så fort jag inte använder en matris längre, så raderar jag den, för att spara minne.TomasL skrev:Jamen, det är ju bara att skicka basadressen på din Array som argument i funktionsanropet.
Lätt som en plätt.

Re: Matrisberäkningar med för STM32?
Det har inte hänt så mycket sedan C99.AndLi skrev:Varför lägga till något som redan finns?Al_Bundy skrev:Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Och för övrigt uppdateras C standarden löpande, därav K&R C, AnsiC,C99,C11,C18....
Re: Matrisberäkningar med för STM32?
Jamen, när du raderat den, så har du ju ingen matris kvar.
Dessutom, dynamisk minnesallokering i inbäddade system är ingen bra grej. Bör undvikas som pesten.
Dessutom, dynamisk minnesallokering i inbäddade system är ingen bra grej. Bör undvikas som pesten.
Re: Matrisberäkningar med för STM32?
Du gör free() på pekaren till minnet. Kräver att minnet är allokerat med malloc().
Annars blir det fel. Att hålla på med malloc/free är inte speciellt effektivt.
Bättre du lägger de på stacken.
Annars blir det fel. Att hålla på med malloc/free är inte speciellt effektivt.
Bättre du lägger de på stacken.
Re: Matrisberäkningar med för STM32?
Eller kör arrayerna statiskt deklarerade, och fyller dem med nya värden vid behöv
Re: Matrisberäkningar med för STM32?
Jasså? Så malloc, mmset och free bör ej användas alls?TomasL skrev:Jamen, när du raderat den, så har du ju ingen matris kvar.
Dessutom, dynamisk minnesallokering i inbäddade system är ingen bra grej. Bör undvikas som pesten.