Hilo Oficial de C/C++

1, 2, 3, 4, 5, 6
Buenas con vuestro permiso me gustaria abrir un hilo para que comenteis lo que querais acerca de este maravilloso lenguaje de programacion :), manuales, codigos, dudas sobre aspectos de este lenguaje y sus variantes, etc.

Me gustaria empezar yo con vuestro permiso :

Sabeis de algun manual(de libre distribuicion claro esta) y a ser posible en castellano sobre la actualizacion de C a C99?, esque estoy aprendiendo el lenguaje con un libro titulado "C, Guia de la autoenseñanza, por herbert schildt, mc-graw hill y no esta actualizado a C99.

Bueno, y que decir, espero que haya movimiento en este hilo :D


Un saludo programadores !!!
Mmmm...mola el hilo tio, yo estoy aprendiendo ahora mismo en el módulo, ya vamos por los arrays... [qmparto]

Sobre tu pregunta no puedo contestarte nada, pero si teno alguna duda no dudaré en postear.


Saludos.
Fox escribió:Buenas con vuestro permiso me gustaria abrir un hilo para que comenteis lo que querais acerca de este maravilloso lenguaje de programacion :), manuales, codigos, dudas sobre aspectos de este lenguaje y sus variantes, etc.

Me gustaria empezar yo con vuestro permiso :

Sabeis de algun manual(de libre distribuicion claro esta) y a ser posible en castellano sobre la actualizacion de C a C99?, esque estoy aprendiendo el lenguaje con un libro titulado "C, Guia de la autoenseñanza, por herbert schildt, mc-graw hill y no esta actualizado a C99.

Bueno, y que decir, espero que haya movimiento en este hilo :D


Un saludo programadores !!!


C# no tiene nada que ver con C++ excepto en que está orientado a objetos..

No todo lo que empieza por C es lo mismo :-P
Ahora no pero me parece que en un mes voi postear unos cuantos mensajes ya que tendre que hacer mi practica de Sistemas Operativos bajo linux en C [noop] .Tendreis noticias mias y espero que me ayudeis [tadoramo]


Salu2
Blame escribió:Ahora no pero me parece que en un mes voi postear unos cuantos mensajes ya que tendre que hacer mi practica de Sistemas Operativos bajo linux en C [noop] .Tendreis noticias mias y espero que me ayudeis [tadoramo]



Blame para mi mas sincera opinion es mucho mas comodo programar bajo linux, asi que no te preocupes, de todos modos, cualquier duda pues preguntas :P


Dinio_Albino escribió:Mmmm...mola el hilo tio, yo estoy aprendiendo ahora mismo en el módulo, ya vamos por los arrays...


Bueno, ya sabes parte del lenguaje ;), si tienes dudas pues preguntas en el hilo y si yo puedo pues te las contesto :D


Un saludo.

PD: Sapison he pedido que quiten lo de C# del titulo para dejarlo en C/C++ ;)
Pues yo estoy dando C++ en "Elementos de programación"... Todavia estamos con los for, while y switch...

PD- Que compilador usais en Winxp?? Yo uso el devc++

Fdo- An0n1m0
Veo que muchos os estais iniciando en la programacion en C, algunos obligadamente y otros por gusto :P, eso es bueno!!!

Sobre el IDE que uso pues Dev-cpp tambien :), es muy completo y para mi perfecto :P

Un saludo.
An0n1m0 escribió:Pues yo estoy dando C++ en "Elementos de programación"... Todavia estamos con los for, while y switch...

PD- Que compilador usais en Winxp?? Yo uso el devc++

Fdo- An0n1m0


Los d emi clase estamos usando el Dev++ que va bastante bien y es sencillo dentro de lo que cabe, pero acabaremos usando el Borland C++ Compiler o C++ Builder, no se exactamente, que aunque no los he visto, dice el profesor que es de lo mejor, pero dificil de utilizar de tnatas cosas que tiene.

Salduso.
Bueno, pues yo tampoco tardaré mucho en pasarme pro aqui, pues nada sobre el IDE yo uso el visual studio, no hay mas cojones estos de la uni me obligan [nop] [nop] Ni que decir tiene que encima nos tenemos que buscar la vida para conseguirlo.

Un saludo
Bueno por fin encontre un manual que habla de C99, para el que no lo sepa se trqata de un nuevo estandar que se adopto en 1999 con algunas mejoras e ideas de C++

Aqui os dejo el enlace :

C99 Standard (ingles)

Un saludo, y cualquier cosa preguntad :D
Los que estais estudiando C/C++ poneros las pilas ya que es quizá el lenguaje mas dificil que hay, yo estuve 1 año estudiando en un curso por que me picaba el gusanillo y aunque aprendi bastante, segun nuestro monitor no habiamos aprendido ni el 10% del global. Para llegar a ser un buen programador de c++ hay que ser por lo menos un soberano, pero por algo se empieza, yo no sabia lo del c99 en fin hace ya muuucho tiempo que no programo en c. Ademas, como trabajo de programador cobol (ya se que no tiene nada que ver xD [maszz] pero buen es mi trabajo) me he tenido que dedicar al 100 por cien en lo que me da de comer, pero bueno como todos los lenguajes tienen sus origenes en comun si puedo os hechare una manita. Yo recuerdo que antes usaba el borland c para compilar, ¿¿todavia sacan nuevas versiones?? juas, hablo del año 95...

salu2.
Versiones del Borland para C hay miles de millones jajaja, ya la verdad es que las veo muy complejas para mi, el Dev-Cpp me aporta la sencillez que busco para programar, aunque en linux me gusta mucho el Anjuta porque cuando ejecutas el programa te abre una consola de gnome automaticamente y no se cierra hasta que no pulsas una tecla, asi que no tienes que estar con el "cmd" abierto, vamos algo similar como poner "getch()" al final de un programa pero sin ponerlo [poraki]

Un saludo :)
Una preguntilla, es dificil meterse a fondo ocn c++ habiendo programado ya cosas gordas en java? Me han dicho que no mucho pero no se.

Un saludo
Hombre ya sabes como va la programacion orientada a objetos, no creo que te suponga ningun problema ;)

Un saludo.
daniel_5 escribió:Una preguntilla, es dificil meterse a fondo ocn c++ habiendo programado ya cosas gordas en java? Me han dicho que no mucho pero no se.

Un saludo


Pues sí, es bastante difícil.. de hecho aunque ambos sean orientados a objetos, Java es una evolución del concepto y resulta bastante más sencillo hacer casi cualquier cosa.. Eso por no hablar del tema de representación gráfica, porque ya entrando en eso te puedes cortar las venas con sus librerías de recursos (al menos en entornos Windows)..

El que es más sencillo es el paso contrario.. saltar de C++ a Java.. es como abandonar el infierno [jaja]

Lo dicho para Java vale igualmente para C#..

Ah, y el Visual Studio .Net es el mejor editor con diferencia para los lenguajes de programación comunes.. una vez más, en entornos windows, claro...
sapison, hablas de VS.NET, pero tambien para hacer aplicaciones de C en consola? no seria un entorno muy complejo para esto?

Un saludo.
Fox escribió:sapison, hablas de VS.NET, pero tambien para hacer aplicaciones de C en consola? no seria un entorno muy complejo para esto?

Un saludo.


No, claro, para hacer un programa en consola, sin nada gráfico, te basta un editor de texto normal y compilas por línea de comandos.. :)

Lo que pasa es que siempre es cómodo contar con el "syntax coloring", pero bueno .. hay muchos editores por ahí free que lo tienen..
Si, tienes toda la razon sapison, yo uso dev-cpp por lo de mostrar la sintaxis con colores :)

Un saludito :P
Pues en clase usamos un compilador de MS, se llama Visual Studio c++ o algo asi xD, la version 6.0, está la .net en clase xro dicen q usemos esta... la verdad es q se me da mal programar, asike este hilo lo mirare amenudo xD

salu2
Un dia de estos tendre que meterme mas a fondo con C++ y dejar un poco el Delphi :P
Otro que programa en C. Yo ahora estoy haciendo C++, Java, PL/SQL y Visual Basic, me estallará la cabeza XD
Jajajjajajaaj wanin, llevas mucho tiempo diciendo eso ;), no creo que te cueste mucho, llevas experiencia ya en esto de la programacion :)
este hilo va tb para novatos??
pos ahi va un problemilla que tengo: estoy tratando de hcer un aleatorio, debe ser muy sencillo pero a mi no me sale [decaio] , este es el codigo:

-------------------
#include
#include
#include
void aleatorio();
int main(void)
{
int i;


printf("diez numeros aleatorios entre 0 y 3\n\n");
for(i=0; i<10; i++){
aleatorio;
}
void aleatorio();
{
randomize();
printf("%i ", rand() % 3);
}
getch();
return 0;
}
---------------
la verdad es que aun no deberia haberme metido con funciones ni cosas de estas pero me estoy adelantando un pokillo al curso
gracias y un saludo [beer]
#include
#include
#include
void aleatorio();

int main(void)
{
int i;

printf("diez numeros aleatorios entre 0 y 3\n\n");
for(i=0; i<10; i++){
aleatorio();
} //fin de for

getch();
return 0;
} //fin de main

void aleatorio()
{
randomize();
printf("%i ", rand() % 3);
} //fin aleatorio


Prueba con eso, la declaracion de la funcion al principio lo has hecho bien, lo que no has hecho bien es la definicion de la funcion, que va fuera del main(){ }
La definicion puedes ponerla tambien al principio del codigo donde tienes la declaracion. Con tu codigo seria asi:

#include
#include
#include
void aleatorio()
{
randomize();
printf("%i ", rand() % 3);
} //fin aleatorio

int main(void)
{
int i;

printf("diez numeros aleatorios entre 0 y 3\n\n");
for(i=0; i<10; i++){
aleatorio();
} //fin bucle for

getch();
return 0;
} //fin main

Espero que no haya metido la gamba y te funcione bien el programa. Hace ya algun tiempo que no toco el tema.

Un saludo
vale, sale lo mismo que me salia a mi en una prueba anterior, escribe 10 veces el mismo numero, mi idea es que escriba 10 numeros aleatorios, igual es que lo he planteado mal
gracias

EDITO:alomejor me falla al utilizar el rand(), que es la primera vez que lo uso
Puf!

Hace mil que no veo esto. Te pongo algo rápido, y luego si quieres te lo busco, auqnue uspongo que con un poco de google encontrarás esto fácilmente.

A mí por lo menos, me enseñaron que había que meter una semilla en randomize, que lo que hace es que crea ó tiene un polinomio a través del cual luego se crea el random. Para esa semilla, algo muy usual es que utilizar la hora. Para ello hay que meter la libreria y luego en el randomize, inicializar con randomize(time(0)) y luego ya hacer el rand.

En fin, voy con mucha prisa así que luego te lo explico mejor y me lo miro mejor todo que no sé si es eso lo que te falla.

Un saludo!
Bueno, a ver si me podeis decir el por que falla esto. Se trata de una minicalculadora, la idea es hacerla con una pila se meten dos numeros y luego */+- y se hac el aoperacion, el resultado s emete en la pila, y luego se introduce otro numero, y la operacion, entonces se saca lo que hay en la pila, se hace la operacion y se vuelve a meter. La cuestión es uqe funciona todo menos la / que hace ocsas raras, y no se por que es, esto e smuy raro. Os dejo le codigo a ver que me podeis decir.

Un saludo

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

typedef struct datos telemento; /* tipotelemento*/

/*Estructura de un elmento de la pila*/
struct datos
{
   double dato;
   telemento *siguiente;
};

/*Funciones*/
void error(void)
{
   perror("Error: Insufiente espacio en memoria");
   exit(1);
}

telemento *NuevoElemento()
{
   telemento *q = (telemento *) malloc(sizeof(telemento));
   if (!q) error();
   return(q);
}

void push(telemento **p, double x); /* añadir dato a la pila*/
double pop(telemento **p); /* saca un elemento de la pila*/


/*Funcion principal*/
void main()
{
   telemento *q, *cima = NULL; /*Creamos la pila vacia*/
   double a, b;
   char op[81] = "";

   cout<<"Calculadora con las operaciones: + - * /\n";
   cout<<"Los datos serán introducidos d ela forma: \n";
   cout<<">operando 1\n";
   cout<<">operando 2\n";
   cout<<">operador\n\n";
   cout<<"Para salir pulse q\n\n";

   do
   {
      cout<<"> ";
      cin.getline(op, 3);

      switch (*op)
      {
         case '+':
            b = pop(&cima);
            a = pop(&cima);
            cout<< a <<"+" << b;
            push(&cima, a+b);
         break;

         case '-':
            b = pop(&cima);
            a = pop(&cima);
            cout<< a <<"-" << b;
            push(&cima, a-b);
         break;

         case '*':
            b = pop(&cima);
            a = pop(&cima);
            cout<< a <<"*" << b;
            c=a*b;
            cout<<"guarda en la pila"<< c;
            push(&cima, a*b);
         break;

         case '/':
            b = pop(&cima);
            a = pop(&cima);

            if (b = 0)
            {
               cout<<"\nDivision por 0\n ";
               break;
            }
            cout<< a <<"/" << b;
            push(&cima, a/b);
         break;

      default :
         push(&cima, atof(op)); /*convierte un caracter en un valor de doble precision*/
      }
   }

   while (*op != 'q');

   
/*Liberamos la memoria pcupada pro la pila*/

   q = cima;
   while (q != NULL)
   {
      cima = cima->siguiente;
      free(q);
      q=cima;
   }
}

/*Añadir dato a la pila*/

void push(telemento **p, double x)
{
   telemento *q, *cima;
   cima = *p;
   q = NuevoElemento();
   q->dato = x;
   q->siguiente = cima;
   cima = q;
   *p = cima;
}


/*Sacar un dato de la pila*/

double pop(telemento **p)
{
   telemento *cima;
   double x;
   cima = *p;
   
   if (cima == NULL)
   {
      cout<<"\nError: No se puede sacar nada de una pila vacia";
      return(0);
   }
   else
   {
      x = cima->dato;
      *p = cima->siguiente;
      free(cima);
      return(x);
   }
}
No tengo mucho tiempo y no puedo echarle una buena ojeada al código (lo siento), pero... porque mezclas de esa forma C con C++??

Saludos
NeoRave escribió:No tengo mucho tiempo y no puedo echarle una buena ojeada al código (lo siento), pero... porque mezclas de esa forma C con C++??

Saludos


Mmm estoy empezando asi que será debido a que lso manuales vienen para c/c++ si me dices que mezclo, la proxima vez, no ocurrirá XD

De todas formas ya lo he solucionado la linea que fallaba era esta:

if (b = 0)


La he cambiado por esta:

if (b == 0)


Me comi un = un puto dia para esto, no si lo mejor hubiera sido reescribirlo.

Un saludo y gracias
Ay... esos operadores relacionales que se nos escapan...jajaja!

Una cosilla... que yo soy novatillo también y hay cosas de las que no me pispo.

cin.getline(op, 3);
Esto para qué es? ¿Por qué no se puede utilizar "cin" normal?

Y luego... hay un poco lío. Utilizas cout y cin que so nde c++ (por lo menos yo en C nunca los vi y no me los dieron hasta que he empezado a dar C++) y luego en cambio para reserva de memoria utilizas malloc, como en C, en vez de el "new" de C++.

No sé si es porque yo no sé mucho, pero esas cosillas no me cuadran. A ver si alguien me las puede explicar, porfaplis...

Y otra cosa que sí "sabía" pero que nunca he sabido la diferencia... ¿qué diferencia hay entre perror y hacer un printf ó cout con el mensaje que quieres mostrar?

Gracias.

Un saludo.
En teoria el codigo es en c++ pero como en la mierdamanual de la uni pone malloc pues puse malloc, pa la proxima vez pondré new, me fiaré mas de la sintaxis de java que de la del mierdamanual ese.
perror se utiliza para sacar el mensaje de error que ocurre a continuacion del que se especifica, no se si me explico.

perror(mensaje de error nuestro:)


Eso devuelve:

mensaje de error nuestro: Mesaje del sistema del error ocurrido


Un saludo

el getline es para leer una linea con la longitud que se quiera
El dev-c++ nuevo, que tiene el minGW (gcc portado a windows) 3.2, si le colocas el flag -Wall (mostrar todos los warnings) te genera un warning cuando colocas un operador de asignación (=), en vez de uno de igualdad (==) en una sentencia condicional o un bucle.

Hice hace tiempo un un documento de iniciación al Dev-C++ por si lo quereis mirar. No enseña a programar sólo a usar el Dev-C++


El cin es un objeto y sirve para introducir un flujo de datos, en el caso del cin se recoge desde la entrada estandar (el teclado)
Sin embargo el cin asigna valores hasta encontrar un salto de línea o un espacio en blanco.
Es decir, si haces

string prueba;
cin >> prueba;

Y tú escribes "hola mundo [ENTER]" sólo guardará "hola" en prueba
sin embargo con el método getline, recoges caracteres hasta que encuentre un fin de línea, hasta un fin de línea o un número de caracteres, lo que ocurra antes (como es este caso) o incluso puedes elegir que getline lea hasta encontrar un caracter concreto (por ejemplo un caracter de tabulación) y no necesariamente el de fin de línea.


En este caso el malloc y el free puedes usarlo en vez de new y delete sin problemas. Sin embargo yo considero estos últimos mucho más cómodos.

Pero sobre todo NUNCA uses malloc o free para crear clases, ya que por lo general acabarás cagándola, ya que malloc no llama al constructor de la clase y free no llama al destructor (este es el error más común, liberar un clase con free, y al no llamarse al destructor se pueden crear fugas de memoria :( )
Voy a verme ese manual, y de paso voy a mandar al profesor y al visual studio lo mas lejos posible. Que es un puto lio.

Bueno gracias por las aclaraciones

Un saludo
zheo luego me miro el manual porque tiene pinta de ser la ostia :D.

A ver si soluciona una de mis dudas mas grandes, el jodido sangrado, cuando le das dos veces a intro para tener un espacio en medio te manda el cursos como 10 tabulaciones a la derecha :S

un saludo y gracias por tu manual ;)
Genial el hilo. Yo en la universidad estoy dando C , no si despues se pone un + o dos + ja ja, pero mi carrera es de ingenieria tecnica industrial y la asignatura es cuatrimestral asi que supongo que no nos deben meter mucha caña, aun asi es una asignatura eln la que aprueba poca gente , a los industriales supongo que no se nos dan bien esas cosas.

Bueno cuando tenga dudas os preguntare asi que mas adelante os dare bastante la lata.

Bueno tengo una preguntilla:

El otro dia en las practicas la gente usaba un comando "cont ++", y no tengo muy clara su utilidad, la verdad es que yo estaba un poco perdido, creo que es un contador, si alguien me puede explicar como, para, porque se usa seria genial.

Otra pregunta es sobre "do while", como se estructura y se usa a grandes rasgos ....

Buff me va a costar aprobar esto del C, incluso prefiero Fluidomecanica ó Termodinamica [lapota] [lapota] a esto, juas.

Gracias y un saludo.

PD: No he tenido tiempo de leer el hilo entero, pero ¿Algun curso de C para bajarme gratuito?

Muchas gracias por aguantarme, se que soy un pelin brasas.

Pd2: En la universidad para el examen practico usamos el Dev-C++ y para el teorico el papel, ja ja.
Buenas shelby, yo tambien estoy de industriales pero ahora mismo estoy en primero, el año pasao estaba haciendo informatica y la verda la carrera no me gustaba mirando a mi futuro profesional.

Por lo que he visto en el librito de petete (la guia docente) en informatica se da C. Y la verda creo que cuando me toque esa asignatura hechare en falta algunas clases de c++, pero bueno todo será abituarse.

Lo que comentas del cont ++, tiene la pinta de ser una variable que tus compalleros la utilizan como contador y lo que hace es incrementar en +1 el valor de la variable.

El do... while() la verda yo no lo he usado mucho, poruqe se puede utilizar haciendo un pequeño arreglo dentro de un bucle while(). Basiacamente es para que realiza alguna operacion antes de entrar en el bucle while.

Si conoces a alguien de informatica pidele los apuntes del primer tema de metodologia de programación 1, hay te explican bastante bien el funcionaniento de los distintos tipos de bucles. Si no conoces a nadie te los podria pasar yo.

Un saludo
Shelby te comento esas dos dudas

cont++, el ++ es para aumentar el valor de la variable(en este caso cont) en 1, por ejemplo:

cont = 10;
cont++;
printf("%d", cont);

cont vale 10, pero luego le sumamos 1 entonces imprimiria 11.

Tambien esta el --, por ejemplo si modificamos el programa anterior:

cont = 10;
cont--;
printf("%d", cont);

esto le restaria 1 a 10 e imprimiria 9.

el Bucle do while lo que hace es ejecutar las lineas que estan dentro del bucle mientras la expresion sea verdadera, es igual que el while normal y corriente, solo que usando "do while" el codigo que esta dentro del bucle se ejecuta al menos una vez, un ejemplo:

int a = 10;

do {
printf("Aqui te escribo el valor de a -> %d", a);
}while(a!=10);

pues aqui si hubieras usado el bucle while normal pues el mensaje no se hubiese mostrado pero al usar "do while" el contenido del bucle se ejecuta antes de comprobar la expresion, o sea, imprime la frase y luego comprueba de si "a" es distinto a 10, pero como no lo es sale del bucle, pero ha ejecutado la sentencia antes de la comprobacion, con el bucle while normal no se hubiese ejecutado porque comprueba que "a" es distinto a 10 y entonces se hubiese saltado el bucle


Se que me explico como el culo jjajaja, pero si tienes dudas intentare explicarlo de otra forma
El do-while se ejecuta una o mas veces mientras que el while se ejecuta 0 o mas veces, es la diferencia de tener la condicion al final del bucle o al ppio

Salu2
Fox, espero que te sea de utiliadad. Justo esa pregunta tuya me la se: desactiva "tabulaciones inteligentes" en opciones del editor.
Es que más que tabulaciones inteligentes creo que son un poquito gilipollas XD

y el ++ y -- tienen su trucos según estén antes o después:

Al hacer contador++ se evalúa primero la variable y luego se incrementa.
Al hacer ++contador, se incrementa la variable y luego se evalúa.

Esto no tiene importancia cuando la única operación es incrementar, pero tiene que ver cuando la variable se evalúa de alguna manera, como al hacer una asignación o en bucles:

Ejemplo1:
int contador = 0;

while ( contador++ != 0){
cout << "esto nunca se ejecuta";
}

Ejemplo2:

int contador = 0

if (++contador == 1){
cout << "esto si que se ejecuta";
}

Cosas del C ;)
Zheo, sabia yo que tenia dos dudas con el Dev-c++.

Me da muuuuuuuuucho coraje que este muchas veces escribiendo una linea y me aparezca el cartel ese amarillo de ayuda, vale no me importa que salga, pero no encima de donde escribo porque no veo naaaaaaaaaaaada y luego pasa lo que pasa y da error en esa linea porque un puto cartel amarillo estaba encima mientras escribia y para colmo no se quita ni con agua, haces clicks por todos lados, encima del cartel y nada, ahi sigue tan campante.

Ahora la pregunta :P, sabes como hacer para que nunca salga el cartelito amarillo?

PD: El manual esta muy currado :P
Pues tienes que desactivar el autocompletado (menú Herramientas / Opciones del Editor / pestaña Explorador de clases / pestaña autocompletar, ahí desmarcas "permitir autocompletar código")
Pero para mi es una de las pocas cosas junto con la vista de clases por las que el Dev-C++ merece la pena frente a otras opciones (como el minGW developer studio)
A veces el cuadradito de los huevos si sale donde no debe, pero si hago clic en otro lado desaparece. mira a ver qué versión tienes del Dev-C++, la última es la 4.9.9.1 (a fecha de hoy :)) Ah, y cuando te habitúes a él, verás como cada poco estás pulsando

PD: Si has hecho algún debug de un programa normalito con el Dev-C++ sabrás a qué me refiero con otras opciones. (te recomiendo que bajes el insight si titnes que haer debug, lo puedes descargar también con la herramienta de auto-actualización)
O estoy espeso a esta hora o esto es un bug del Dev-C++, haced el favor de probarlo, tengo la version 4.9.9.1

#include
using namespace std;

main()
{
int tabla[9];
tabla[10] = 1234;
cout << tabla[10] << endl;
}


---------------------

Esto imprimira 1234 en pantalla, que yo sepa int tabla[9]; ira desde
"0 hasta 8", no es cierto? es un array de 9 variables, pero porque no da error al ejecutar el programa?
si pones un numero mayor como indice de array si da error.... sera que el espacio de mi ram en esa posicion esta vacio?? y no da error? aun asi no deberia de valer....

Un saludo.
A mi me imprime loq eu dices, pero una cosa en c++ es como dices va de 0 a el maximo, pero c++ no verifica los subindices del array, por lo que si podemos poner un subindice que no sea del array. Yo creo que eso se debe a que casualmente en la memoria hay 1234.

Un saludo
probado en C tambien y lo mismo, y no no hay 1234 en la memoria, cambia el valor que le asignas y veras.

Un saludo.
De casualmente nada ;)
tabla[10] = 1234;


Mientras no accedas a direcciones reservadas de memoria al sistema operativo, otras aplicaciones y demás no tendrás ningún error; aunque tengo entendido que el acceso a zonas de memoria de SSOO en win no se comprueba y te puedes ganar un bonito BSOD en lugar de un error de ejecución.

Saludos

PD: si me equivoco, corregidme
ques es BSOD? yo pense eso, que como esa memoria no estaba reservada la usaba por la puta cara xD

Un saludo.
No es que lo haga por la cara, es que precisamente es una de las causas de la velocidad del código en C, que no pierde tiempo comprobando índices, eso lo deja en manos del programador.

BSOD: Blue Screen Of Death [+risas]
Ah coño, pantallazo azul de la muerte xD

Yo se que tenemos que comprobar los indices, pero me esperaba que el programa diese error al ejecutarse el BSOD xD.


Una cosa que no entendi nunca es lo de BIT MENOS(mas) SIGNIFICATIVO. Que carajo es eso? que alguien me lo explique.

Un saludo.
lodel BIT mas meno significativo e spor ejemplo en ete numero 1011 el BIT mas significativo es el primer bit empezando por la izquierda y el Menos significativo es el primer 1 empezando pro la derecha, ¿por que es asi? sencillo, 1011 en decimal es 11

Si quitamos el pirmer uno el BIT mas siginificativo, se nos queda en 0011=3 pero si quitamos el BIT menos significativo se nos queda en 1010=10 esto en este numero de bits es significativo, peor por ejemplo en 32bits la diferencia seria inapreciable.

Esto es a grandes rasgos.

Un saludo
A ver, tabla[10] se refiere a una simple posición de memoria, en concreto sería la posición de memoria determinada por:

&tabla[0] + (10 * sizeof(int))

En este caso has podido modificar la memoria sin consecuencias, pero ha sido de chiripa (podrías estar modificando una zona de memoria protegido por el SO y no te dejará, aunque no te dará un BSOD, sino una excepción de acceso no permitido a memoria)
Sin embargo el problema es que esa zona de memoria (tabla[10]) no está marcada para su uso, y si en el programa utilizas más arrays o reservas memoria dinámicamente podrías estar sobreescribiendo una zona asignada a otra variable/array, lo que daría como consecuencia un posible bug jodidísimo de localizar más adelante :(
288 respuestas
1, 2, 3, 4, 5, 6