libro **bib=NULL;libro **aux=NULL;
libro.open("Socios.bin",ios::out|ios::binary);
saludos amigos una dudaCon la primera estas creando punteros de tipo libro (debe ser una clase o algo así o estructura no se, corrijanmen si estoy mal pero creo que a un puntero no se le puede asignar un valor NULL :blink: )
cual es la diferencia :Citarlibro **bib=NULL;libro **aux=NULL;
con esto:Citarlibro.open("Socios.bin",ios::out|ios::binary);
ay alguna diferncia entre esos 2 codigos o son iguales??
cual es la diferenciaEste es uno de los mensajes mas graciosos que lei eh ...
Ayudalo Señor.
NULL es 0 y efectivamente es una buena practica de programacion inicializar las variables asi.Sip, ahora me acuerdo de esa discusión tormentosa del otro día :P
NULL es 0 y efectivamente es una buena practica de programacion inicializar las variables asi.No necesariamente... pero si es así en todos los casos que conozco... :whistling:
No necesariamente... pero si es así en todos los casos que conozco... :whistling:NULL es 0 hasta que se demuestre lo contrario :kicking:
Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.
No es casi todos, eso es mentira mientras no muestres NINGUN compilador que defina NULL como algo diferente a cero. Por eso mantengo que NULL es 0 hasta que demuestres lo contrario; y es mas, NULL es 0, si a algun imbecil se le ocurre ponerle otro valor que lo haga, seguira siendo 0 para cualquiera. Por algo es NULL!
Quedo demostrado que NULL es 0 en casi todos o todos los compiladores actuales, pero también quedo claro que null puede ser cualquier cosa de acuerdo a ANSI C.No es casi todos, eso es mentira mientras no muestres NINGUN compilador que defina NULL como algo diferente a cero. Por eso mantengo que NULL es 0 hasta que demuestres lo contrario; y es mas, NULL es 0, si a algun imbecil se le ocurre ponerle otro valor que lo haga, seguira siendo 0 para cualquiera. Por algo es NULL!
http://encarta.msn.com/dictionary_/null.html (http://encarta.msn.com/dictionary_/null.html)la definición de microsoft no implica standart .
la definición de microsoft no implica standart .¿Standart? Es standard, por favor. Esa no es una definicion de Microsoft, es un diccionario de la lengua no de informatica.
5. Null Pointer Constants
5.6 If NULL were defined as follows:
#define NULL ((char *)0)
wouldn't that make function calls which pass an uncast NULL work?
En general, un puntero se puede iniciar como calquier otra variable, aunque los unicos valores significativos son NULL o la direccion de un objeto previamente definido. NULL es una constant definida en el fichero stdio.h asi:
#defined NULL ((void *)0) // definicion de NULL en c
#defined NULL 0 // definicion de NULL en C++
El lenguaje C garantiza que un puntero que apunte a un objeto valido nunca tendra un valor cero.
El valor cero se utiliza oara indicar que ha ocurrido un error; en otras palabras, que una determinada operacion no se ha podido realizar. Por ejemplo, recuerde que la funcion gets cuando lee la marca de fin de fichero retrna un puntero nulo (NULL), indicando asi que no ha mas datos para leer.
En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es el, el que sabe en todo momento que direcciones estan libres y cuales estan ocupadas...
C con clase:CitarEn general, un puntero se puede iniciar como calquier otra variable, aunque los unicos valores significativos son NULL o la direccion de un objeto previamente definido. NULL es una constant definida en el fichero stdio.h asi:
#defined NULL ((void *)0) // definicion de NULL en c
#defined NULL 0 // definicion de NULL en C++
El lenguaje C garantiza que un puntero que apunte a un objeto valido nunca tendra un valor cero.
El valor cero se utiliza oara indicar que ha ocurrido un error; en otras palabras, que una determinada operacion no se ha podido realizar. Por ejemplo, recuerde que la funcion gets cuando lee la marca de fin de fichero retrna un puntero nulo (NULL), indicando asi que no ha mas datos para leer.
En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es el, el que sabe en todo momento que direcciones estan libres y cuales estan ocupadas...
C/C++ Curso de prgamacion 2ª edicion.
Fco. Javier Ceballos.
Uds. diran... :blink:
Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.
Ejemplo:
#define NULL 0 DJGPP
#define NULL 0
ó
#define NULL 0L
ó
#define NULL ((void *)0) Borland
#define NULL ((void*0) /* Para C++ */ Dev-C++
No pienso continuarYo no hago perder el tiempo... cada cual pierde el tiempo como quiere <_<
...
Por dios, que manera de hacer perder el tiempo y confundir innecesariamente a la gente.
C con clase:No es un standard de facto para nada, estas confundido y confundiendo innecesariamente.CitarMacro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.
Ejemplo:
#define NULL 0 DJGPP
#define NULL 0
ó
#define NULL 0L
ó
#define NULL ((void *)0) Borland
#define NULL ((void*0) /* Para C++ */ Dev-C++
Yo no hago perder el tiempo... cada cual pierde el tiempo como quiere <_<Si lo haces, no tenes ni la menor idea de lo que hablas y mantenes una posicion ridicula. Esta clarisimo que el valor de NULL es 0, lo dice el standard y hay citas hasta de las paginas que vos trajiste a este hilo. No ves que la diferencia es el casting, muy bien, es tu problema. NULL es 0, siempre, no hay duda, no es un standard de facto es lo que viene en el standard, su valor es 0 si o si.
Numero en la posicion 0 es: 1
en español la palabra es Estándar :P
A veces null es 0 pero a veces no por ejemplo
Error 1 error C2107: illegal index, indirection not allowed
o por ejemplo en un arreglo puedo hacer esto?Buen ejemplo F_Tanori, yo soy el menos indicado para opinar y solo lo voy a hacer a manera lo poco que he entendido.
numeros[5]={1,2,3,4,5,6};
printf ("Numero en la posicion 0 es:",numeros[NULL]);CitarNumero en la posicion 0 es: 1
NULL actualmente es y sera '0', pero si alguién lo cambia puede apuntar donde quiera.Si, puede ser cambiado PERO y es un gran pero, quebrarias el standard.
Mentira, haciendolo bien tenes tu 1 en pantalla:MENTIRA!!!!Código: Text
#include <stdio.h> void main() { int numeros[]={1,2,3,4,5,6}; printf ("Numero en la posicion 0 es: %d",numeros[NULL]); }
sip, eso si.Cita de: "RadicalEd"NULL actualmente es y sera '0', pero si alguién lo cambia puede apuntar donde quiera.Si, puede ser cambiado PERO y es un gran pero, quebrarias el standard.
pointer.c: En la función `main':[/color]
pointer.c:5: error: array subscript is not an integer
MENTIRA!!!!Que manera de hablar al pedo, por supuesto que no compila si pones mal el tamaño del array! Si hubieras visto mi codigo te darias cuenta de que eso esta solucionado aunque claro tenes que decir que lo hiciste vos ...
tal como esta mostrado no compila.
primero que todo porque el arreglo es de 5 y esta llenado con 6... :whistling:
Y segundo aun si se soluciona eso bota el error que dije.
Mira estos errores:Logicamente puede no funcionar al poder estar definido como un puntero, eso es lo que dice CLARAMENTE el standard que es definido por el compilador.Citarpointer.c: En la función `main':
pointer.c:5: error: array subscript is not an integer
Con cl archivo.cpp compila perfectamente.claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.
C:\Documents and Settings\jruiz\Escritorio>cl code.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright © Microsoft Corporation. All rights reserved.
code.c
code.c(6) : error C2107: illegal index, indirection not allowed
C:\Documents and Settings\jruiz\Escritorio>
no respete la sintaxis, es mas yo casi ni uso C :P, era un ejemplo pense que se entendia a que me referia :PCita de: "Eternal Idol"Mentira, haciendolo bien tenes tu 1 en pantalla:MENTIRA!!!!Código: Text
#include <stdio.h> void main() { int numeros[]={1,2,3,4,5,6}; printf ("Numero en la posicion 0 es: %d",numeros[NULL]); }
tal como esta mostrado no compila.Código: Text
int numeros[5]={1,2,3,4,5,6}; printf ("Numero en la posicion 0 es:",numeros[NULL]);
primero que todo porque el arreglo es de 5 y esta llenado con 6... :whistling:
Y segundo aun si se soluciona eso bota el error que dije.
claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.
Entonces ....???? :ph34r:
...Yo creo que es un espacio reservado que tal vez al convertirlo a entero se hace 0
es como pasar "" (vacio) a entero da cero ...
:smartass: :comp:
Sin embargoCita de: "Eternal Idol"Con cl archivo.cpp compila perfectamente.claro porque al cambiarle la extencion ya no estamos hablando de C, sino de C++.
Esto es compilándolo como código de C:CitarC:\Documents and Settings\jruiz\Escritorio>cl code.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright © Microsoft Corporation. All rights reserved.
code.c
code.c(6) : error C2107: illegal index, indirection not allowed
C:\Documents and Settings\jruiz\Escritorio>
pointer.cpp: En function `int main()':[/color]
pointer.cpp:5: aviso: converting NULL to non-pointer type
en ningún lado de ANSI C dice que solo los castings. :whistling:Sos un NECIO, el valor es 0 asi que ya nos contaras que es lo que les permiten definir:
Ahora, yo no se de C/C++ asi que como dice Radical, no me peguen
yo solo digo unas cosas:Decis muchas cosas, lamentablemente soles hablar de cosas que no sabes o no logras comprender. En este caso como lo vas a tener claro si no sabes ingles ...
1- yo uso null como si fuera 0, siempre
2- el hecho de que yo y la mayoria o la totalidad lo use asi no implica que sea lo absolutamente cierto cierto... me gusta sembrar controversia para ponernos a pensar, porque para mi ese rollo no esta claro por ANSI C, ni por ningún lado.
yo solo digo unas cosas:
1- yo uso null como si fuera 0, siempre
2- el hecho de que yo y la mayoria o la totalidad lo use asi no implica que sea lo absolutamente cierto cierto... me gusta sembrar controversia para ponernos a pensar, porque para mi ese rollo no esta claro por ANSI C, ni por ningún lado.
Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:Cita de: "su -"Ahora, yo no se de C/C++ asi que como dice Radical, no me peguenCódigo: Text
#include <stdio.h> void main() { int numeros[]= { 1, 2, 3, 4, 5, 6 }; int i = 0; printf("NULL: %d ", numeros[(int)NULL]); printf("Con i: %d ", numeros[i]); }
Asi da compilado en C y C++: "NULL: 1 Con i: 1"
NULL es 0 un espacio definido por el compilador que puede ser modificado por el programador para apuntar hacia donde le pege la gana, aunque eso es 'romper' el estandar pero es posible hacer que null no sea 0Entonces, finalmete deduciendo al final (jejeje)
osea no llegamos a nada :unsure:Todo lo contrario, llegamos mucho mas lejos que en el hilo anterior donde quedo una verdad a medias. NULL suele ser una macro con lo cual hasta la podemos definir nosotros, si no incluimos ningun header no existe, y podemos poner #define NULL 5005 o #define NULL 140-139-1. El primero quebraria el standard y el segundo no. CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.
NULL es 0 un espacio definido por el compilador que puede ser modificado por el programador para apuntar hacia donde le pege la gana, aunque eso es 'romper' el estandar pero es posible hacer que null no sea 0
Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:NULL ya esta definido su-, por eso suelta el error.Código: Text
#include <stdio.h> #define NULL (char *)0) /* no se si este bien */ void main() { int numeros[]= { 1, 2, 3, 4, 5, 6 }; int i = 0; printf("NULL: %d ", numeros[(int)NULL]); printf("Con i: %d ", numeros[i]); }
Y Dice (GCC 4.1.1)
In file include from /usr/include/_G_confi.h:14,
from /usr/include/libio.h:32, from /usr/include/stdio.h:72, from test.c:1
/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stddef.h:402:1:1 warning: this is the location of the previous deinition
test.c: In function 'main':
test.c:10: error: array subscript is not an integer :unsure:
CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
tendrias que hacerle un #undef...Cita de: "Eternal Idol"Que raro, a mi me dice que NULL no es un entro, no compila, defini NULL (no se si deba) asi:Cita de: "su -"Ahora, yo no se de C/C++ asi que como dice Radical, no me peguenCódigo: Text
#include <stdio.h> void main() { int numeros[]= { 1, 2, 3, 4, 5, 6 }; int i = 0; printf("NULL: %d ", numeros[(int)NULL]); printf("Con i: %d ", numeros[i]); }
Asi da compilado en C y C++: "NULL: 1 Con i: 1"Código: Text
#include <stdio.h> #define NULL (char *)0) /* no se si este bien */ void main() { int numeros[]= { 1, 2, 3, 4, 5, 6 }; int i = 0; printf("NULL: %d ", numeros[(int)NULL]); printf("Con i: %d ", numeros[i]); }
Y Dice (GCC 4.1.1)
In file include from /usr/include/_G_confi.h:14,
from /usr/include/libio.h:32, from /usr/include/stdio.h:72, from test.c:1
/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stddef.h:402:1:1 warning: this is the location of the previous deinition
test.c: In function 'main':
test.c:10: error: array subscript is not an integer :unsure:
Si, PERO NO SERIA STANDARD, que es lo que afirmaste en el otro hilo. NO SERIA STANDARD.Cita de: "Eternal Idol"CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
Aun asi, aunque este definido en stdio GCC no lo ve como un numero entero, Radical le da el mismo error.Por que no es un entero, es un puntero.
Eso te pasa cuando usas lenguajes post-modernos :wacko: donde no hay problema contal cosa (si en Perl se puede, sin problema) :smartass:Cita de: "su -"Aun asi, aunque este definido en stdio GCC no lo ve como un numero entero, Radical le da el mismo error.Por que no es un entero, es un puntero.
Solo te duele no tener la razón.Cita de: "JuanK"Si, PERO NO SERIA STANDARD, que es lo que afirmaste en el otro hilo. NO SERIA STANDARD.Cita de: "Eternal Idol"CUALQUIER compilador de C y C++ que se precie seguira el standard, especialmente en cosas tan simples.lo que pasa es que ese 'que se precie' es un juicio de cada cual, proque el que lo quiera hacer diferente es libre de hacerlo... incluso un compilador hecho pro estudiantes sin necesidad de que 'se precie' puede escoger usar NULL como 0
Te invito a dejar la necedad y RAZONAR, deja de hacer el ridiculo:
Esto es lo que dijiste primero:
Macro NULL ANSI C
#define NULL
Un puntero nulo constante definido según la implementación.
Esto es de tu pagina http://www.greenend.org.uk/rjk/2001/02/cfu.html: (http://www.greenend.org.uk/rjk/2001/02/cfu.html:)
The standard says:
An integral constant expression with the value 0, or such an expression cast to void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compared unequal to a pointer to any object or function.
¿Que es un puntero nulo constante segun el standard? Una expresion constante cuyo valor es 0. ¿Lo entendes o no sos capaz?
Solo te duele no tener la razón.Pobrecito, el que no tiene la razon sos vos y no tenes COMO SIEMPRE la capacidad de hacer autocritica. Se nota que pasan los años y seguis siendo el mismo, es una pena.
cada cual que defina por si mismo que es que... para mi no quedo definido nada de lo que tu dices, pero tampoco lo que yo dije... el estándar o no es claro o esta libre a como lo quiera hacer cada cual.
por el momento al menos no he visto en ningún lugar de ANSI C que diga que NULL DEBE ser 0...Es que no debe ser 0. ¿Tenes problemas de compresion? SU VALOR DEBE SER 0.
Dice que :
Un puntero nulo constante definido según la implementación.
Disculpen, pero creo que los menajes de "yo tengo la razon y tu no" van mejor por MP no me pelen, solo sugiero, es que asi el foro se ve sucio, que se puede esperar de un lugar que hablan y hablan de difernecias en "peleas" por algo que no debe...No hay razon en esto sino realidad. Y creo que con solo leer detenidamente lo que dice el standard cualquier persona normal tiene que darse cuenta que NULL tiene que tener como valor 0.
Lo sugiero para que se tenga que cerrar esto...
:)
Bueno...Eso no explica nada sobre que debe ser NULL segun el standard, solo dice como esta creo que bien aclarado, que NULL puede ser incluso (no en C++ pero si en C) ((void *)0). Ahi vemos un ejemplo claro de correcto uso del standard ya que el valor de NULL es 0.
http://c-faq.com/null/nullor0.html (http://c-faq.com/null/nullor0.html)
:rolleyes:
Programming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules.Ademas no creo que se puede poner un estandar ya que NULL se puede usar como un numeral y no como un numero... eso creo no se.
17.10:El estilo de programacion no tiene NADA que ver con el standard. Y no importa que no lo creas realmente, no tenes que creer nada, tenes que leer lo que dice el standard y punto, haciendolo sabras que condiciones tiene que cumplir un compilador para ser justamente standard.CitarProgramming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules.Ademas no creo que se puede poner un estandar ya que NULL se puede usar como un numeral y no como un numero... eso creo no se.
Bueno, quien soy yo para hablar de esto, esta claro que si dice asi (el compilador/interpretado...) asi debera ser, justifica las limitaciones y ciertamente las tendras...Jeje, a efectos practicos si, NULL es 0, su valor debe ser 0 pero puede ser cosas como 100-95-5 o (char*)0, todo mientras su valor sea 0 en C sera valido.
En fin NULL es 0 :P
pd: soy un caso medio perdido no doy un tema y todos a discutir bien la verdad sigan adelante no desfallescan pronto les dare mas tareasssss smartass.gif smartass.gif