Die letzten 10 Beiträge |
D0RK |
Alles klar, danke. Hab's kapiert. |
eulerscheZahl |
%d ist für Adressen nicht geeignet, allein schon weil%d nur int (üblicherweise 32 Bit) kann, ein Zeiger bei mir aber 64 Bit hat. Also kommt es zum Überlauf, ich erhalte dann Speicherstartadresse: -112012448
Die 4 Byte bekommst du, wenn du mit sizeof(float) multiplizierst. |
D0RK |
Sprich für müssten es dann 40 Zellen für das Array sein. So verstehe ich das... |
D0RK |
Dem kann ich nicht folgen... Das mit den Adressen hab ich verstanden. Wobei, wir im Tutorium die Adressen immer nur als Zahlen und nicht so angegeben haben. Allerdings soll man ja die Speicherzellen angeben die vom Array belegt sind und float sind doch immer 4 Byte? Müsste man dann nicht auch 4 Byte angeben können? |
eulerscheZahl |
code: |
1:
2:
3:
4:
|
printf("\nSpeicherstartadresse: %p",d);
printf("\nSpeicherendadresse: %p",d+9);
printf("\nerste Speicheradresse hinter dem Array: %p", d+10);
printf("\nDie Differenz zweier benachbarter Einträge: %ld\n", (d+10) - (d+9)); |
|
Die Differenz ist 1 und nicht 4, weil hier mit dem Datentyp float gerechnet wird und nicht mit Bytes. |
D0RK |
Hoppala, hab mich vertan, ja natürlich ist das C
. Wo ich schon mal hier bin. Hab nen neues Problem:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
#include <stdio.h>
int main()
{
printf("Bitte gebe nun 10 Zahlen ein: \n");
float array[10];
for(int i=0;i<10;i++)
{
scanf("%f",&array[i]);
};
for(int u=0; u<10;u++)
{
printf("%f \n",array[9-u]);
}
float *d=array;
printf("\nSpeicherstartadresse: %d",d);
printf("\nSpeicherendadresse: %d",d+9);
printf("\nerste Speicheradresse hinter dem Array: %d", d+10);
printf("\nDie Differenz zweier benachbarter Einträge: %d", );
}
|
|
Aufgabe ist im Anhang.
Das funktioniert an sich, aber ich muss zum Schluss die Differenz der beiden benachbarten Adressen und die gesamt Adressen, die das Array besitzt angeben. Problem ist allerdings, dass ich den Pointer als float definiert habe und wenn ich dann die Differenz immer berechne 1 herauskommt.
D0RK hat dieses Bild (verkleinerte Version) angehängt:
|
eulerscheZahl |
Das ist aber C und nicht C#. |
D0RK |
RE: c# cannot convert double to double
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
#include <stdio.h>
#include <math.h>
void polar_zu_kartesisch(double *u, double *v, double r, double phi)
{
*u=r*cos(phi);
*v=r*sin(phi);
}
int main()
{
printf("Beispielwerte dieser Funktion r=2.84, phi=pi/4 \n");
double array[4]={0.00,0.00,2.84,0.78539};
double *p=array;
polar_zu_kartesisch(p, p+1, *(p+2), *(p+3) );
printf("Die Ergebnisse sind: x=%f, y=%f", array[0],array[1]);
}
|
|
So funktioniert das ganze. Falls jemand sehen will wie ich's gelöst hatte. |
D0RK |
RE: c# cannot convert double to double
Hab' schon herausbekommen.
|
D0RK |
c# cannot convert double to double
Meine Frage:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
#include <stdio.h>
#include <math.h>
void polar_zu_kartesisch(double *u, double *v, double r, double phi)
{
*u=r*cos(phi);
*v=r*sin(phi);
}
int main()
{
printf("Beispielwerte dieser Funktion r=2.75, phi=45°");
double array[4]={0.00,0.00,2.75,45.0};
double *p=array;
polar_zu_kartesisch(p, p+1, p+2, p+3 );
printf("Die Ergebnisse sind: x=%d, y=%d", p+1,p+2);
}
|
|
Meine Ideen:
Hi, ich verstehe nicht wie ich den Fehler in c# "cannot convert double to double" beheben kann. Wir sollen den oberen Funktionskopf verwenden. Ich gehe davon aus, dass der Fehler auftritt, weil ich 2x double deklariere? Biite um Hilfe. |
|
|