array vorbelegung

Gast #3811594
Lesenswert?

tatsächlich sind die reslichen udefiniert.
Habe es eben mal getestet...
Zufällig hatte ich anfangs auch immer 0..aber eben das war nur Zufall..
Das hasse ich an C!!
Bei Sprachen wie Pascal gibt es NUR richtig oder falsch..
In C gibt es dann noch..funktioniert...kann funktionieren...ist aber 
nicht richtig..irgendwann eghts in die Hose...
(Firma: Brainit GmbH) #3811621
Lesenswert?

Ramon schrieb:
> Bei Sprachen wie Pascal gibt es NUR richtig oder falsch..
Deswegen programmiert ja auch die ganze Welt in pascal, und nur ein paar 
Deppen in C...

> In C gibt es dann noch..funktioniert...kann funktionieren...ist aber
> nicht richtig..irgendwann eghts in die Hose...
Nein, da liegst du falsch. In C ist ein Verhalten definiert, dann kann 
man sich drauf verlassen, oder es ist nicht definiert, dann kann man 
sich nicht drauf verlassen. So einfach ist das. Das überfordert aber 
offensichtlich Pascal-Programmierer :-)
Gast #3811653
Lesenswert?

Ramon schrieb:
> Das hasse ich an C!!

Na ja, du kennst wohl einigermaßen Pascal und wunderst dich nun, dass du 
bei etwas Anspruchsvollerem mit der Methode "hier und da im Internet 
etwas aufschnappen" nicht weit kommst.
Besorge dir mal ein vernünftiges Buch und den Standard (oder zumindest 
einen kostenlosen Draft), sonst wird so etwas immer wieder passieren.
Gast #3811660
Lesenswert?

öhm..weil C einfach geschichtlich am weitestehend verbreitet ist?
Weil wenn alle es benutzen, ich als Angestellter nicht sagen kann, nö 
ich nehem nicht C?!?
Weil sich nicht immer das bessere durchsetzt?(Wobei ist das jetzt nicht 
mal auf C oder Pascal beziehen möchte, denn tatsächlich hat C natürlich 
seine stärken und flexibilität die Pascal bei weitem nicht hat, dafür 
kann man bei Pascal einfach davon ausgehen das es fehlerfreier ist!)

" dann kann man
sich nicht drauf verlassen. "
lol und das findest Du jetzt gut oder was ? :-)

Was an meiner Aussage war denn dann falsch..Du sagst man kann sich nicht 
drauf verlassen und ich sage..irgendwann gehts in die Hose..erklär mir 
jetzt mal den unterscheid :-)

Nein  danke, dann doch lieber nur richtig oder falsch!

"Deswegen programmiert ja auch die ganze Welt in pascal, und nur ein 
paar
Deppen in C..."

dieser Satz wiederum offenbart mir, das eine Diskussion mit Dir nicht 
zielüführend sein wird.
Weder bezcihne ich C Leute als Deppen noch behaupte ich das Pascal der 
heilige Gral ist..
Es gibt nunmal nicht nur schwarz oder weiß..aber diese Eigenschaften 
nerven nunmal an C!

Falls Du mal länger und umfangreicher mit PAscal (nicht version 4 oder 
sowas) gearbeitet hast auch in der Schule, kannst Du sicher auch offener 
damit umgehen.
Ich habe etwas mit Basic (als Kind auf einem Schnedier CPC6128) dann 
Pascal eben auf diesem CPC und seite einigen jahren schaue ich immer mal 
wieder rüber zu C...aber gerade für die mikcrocontroller scheint mir C 
eigentlich nicht so gut geeignet wie viele hier meinen.

Klar, der totale nerd, bekommt sicher 1a C Programme hin, und der ist 
hier sicher auch gut aufgehoben, aber 80% der Gelegenheits und 
Hobbyprogrammeirer werden wohl die meiste Zeit mit der Fehlerbeseitigung 
der C geschichten beschäftigt sein..
(Firma: Brainit GmbH) #3811708
Lesenswert?

Ramon schrieb:
> dafür
> kann man bei Pascal einfach davon ausgehen das es fehlerfreier ist

Mutige Aussage...

Ramon schrieb:
> " dann kann man
> sich nicht drauf verlassen. "
> lol und das findest Du jetzt gut oder was ? :-)

Du wirst lachen: Ja. Wenn der Standard mir sagt dass ein Verhalten nicht 
definiert ist, dann sagt mir der Standard und mein Verstand, das das 
Verhalten nicht definiert ist, und ich mich nicht darauf verlassen soll, 
dass es sich definiert verhält. Ja, das ist gut.

Ramon schrieb:
> Falls Du mal länger und umfangreicher mit PAscal...
Hab ich. Länger als mir lieb war.

Pascal ist eine Lehr- und Lernsprache. Nicht weniger, aber auch nicht 
mehr. Dafür wurde es gemacht.

Ramon schrieb:
> aber 80% der Gelegenheits und
> Hobbyprogrammeirer werden wohl die meiste Zeit mit der Fehlerbeseitigung
> der C geschichten beschäftigt sein..

Man soll nicht von sich auf andere schließen ;-)
#3811789
Lesenswert?

Nur um es nochmal ausrücklich zu sagen: Gibt man bei einer Array 
Initialisierung weniger Elemente an als das Array groß ist wird der Rest 
mit Nullen aufgefüllt.

@Ramon
Scheinbar hält sich dein Compiler dann nicht an den C Standard. Ich habe 
es gerade nocheinmal nachgeschaut. Aus dem C89 Standard:

If there are fewer initializers in a list than there are members of an 
aggregate, the remainder of the aggregate shall be initialized 
implicitly the same as objects that have static storage duration. [...] 
If an object that has static storage duration is not initialized 
explicitly, it is initialized implicitly as if every member that has 
arithmetic type were assigned 0 and every member that has pointer type 
were assigned a null pointer constant.
Gast #3825793
Lesenswert?

In C++ kann man sich eine Hilfs-Funktion schreiben, die ein Array 
produziert das komplett mit einem Wert gefüllt wird. Ist 1x etwas 
Tipparbeit aber dann kann man sich einfach gefüllte Arrays produzieren. 
Das Array kann dabei auch im Flash landen, denn der Füll-"Algorithmus" 
wird vom Compiler selbst berechnet und das Ergebnis (= das gefüllte 
Array) kann direkt in das Programm eingebaut werden.
1
#include <array>
2
#include <cstddef>
3
#include <iostream>
4

5
/*
6
  Helper-Code
7
*/
8

9
namespace Helper {
10
  template<size_t...> struct Seq{ using type = Seq; };
11

12
  template<class S1, class S2> struct ConcatI;
13

14
  template<size_t... I1, size_t... I2>
15
  struct ConcatI<Seq<I1...>, Seq<I2...>>
16
    : Seq<I1..., (sizeof...(I1)+I2)...>{};
17

18
  template<class S1, class S2>
19
  using Concat = typename ConcatI<S1, S2>::type;
20

21
  template<size_t N> struct GenSeqI;
22
  template<size_t N> using GenSeq = typename GenSeqI<N>::type;
23

24
  template<size_t N>
25
  struct GenSeqI : Concat<GenSeq<N/2>, GenSeq<N - N/2>>{};
26

27
  template<> struct GenSeqI<0> : Seq<>{};
28
  template<> struct GenSeqI<1> : Seq<0>{};
29
  
30
  template <typename T, size_t N, typename S>
31
  struct FillArray;
32
  
33
  template <typename T, size_t N, size_t... I>
34
  struct FillArray<T, N, Seq<I...>> {
35
    static constexpr std::array<T, N> fillArray (const T& value) {
36
      return {{ (static_cast<void> (I), value)... }};
37
    }
38
  };
39
}
40

41
template <typename T, size_t N>
42
constexpr std::array<T,N> fillArray (const T& value) {
43
  return Helper::FillArray<T, N, Helper::GenSeq<N>>::fillArray (value);
44
}
45

46
// Ein Array von Typ int, mit Größe 7 anlegen, und mit 42 auffüllen.
47
constexpr auto myArray = fillArray<int, 7> (42);
48

49
int main () {
50
  std::cout << "myArray enthält: ";
51
  for (int i : myArray) std::cout << i << ", ";
52
  std::cout << std::endl;
53
}
Gast #3826142
Lesenswert?

Falk Brunner schrieb:
> @ mec (Gast)
>
>>Warum wollen alle immer vorbelegte Arrays und Anderes?
>
> Weil dort manchmal Konstanten wie Tabellen, Strings etc. drin stehen?

hab mich schlecht ausgedrückt.
Warum sollte ich wollen, das ein Speicherbereich zuerst mit Nullen 
gefüllt wird die ich nie benötige, wenn ich dann sowieso kurz darauf die 
wirklichen Werte reinschreibe.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren