Duda direcciones de memoria C

Iniciado por dRak0, 18 Julio 2013, 15:46 PM

0 Miembros y 3 Visitantes están viendo este tema.

eferion

No me había dado cuenta de ese detalle... también es cierto que evito ese tipo de declaraciones.

bueno ojo OxDani

void main( )
{
  int* a, b;

  b = 1;
  a = &b;
  b = a;
}


resultado:

error: C2440: '=' : cannot convert from 'int *' to 'int'
There is no context in which this conversion is possible

Caster

#include <stdio.h>

int main()
{
   int* px, py;
   int *pz, x=1, y=2, z=3;

   px = &x;
   py = &y;
   pz = &z;

   printf("%X  %X  %X", px, py, pz);
   printf("\n%d  %d  %d", x, y, z);
   return 0;
}


Según este codigo, lo que dice Oblivi0n es verdad

Oblivi0n

Para programar en C hace falta un poco mas que conocer el lenguaje  ;)

0xDani

Cita de: Oblivi0n en 18 Julio 2013, 16:27 PM
http://stackoverflow.com/questions/12626929/pointer-c-declaration

De ese link:

int* p, p2;  // declares a pointer to int and a regular int
int *p, *p2; // declares two pointers to int


De todas formas, por muy bueno que sea el foro Stack Overflow, no es una referencia fidedigna para este tipo de debates.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

eferion

Cita de: Oblivi0n en 18 Julio 2013, 16:32 PM
Para programar en C hace falta un poco mas que conocer el lenguaje  ;)

Yo más bien diría que lo suyo es no optar por código tan peregrino y, visto lo visto, tan propenso a segundas interpretaciones.

Caster

A ver que no me entero de una, entonces si hacemos esto:

int* ptr1,ptr2,ptr3;

El unico puntero que hay aqui es ptr1, no?

eferion

Si puedes evitar este tipo de líneas mejor. Por lo que he podido ver en este hilo depende del compilador a utilizar...

En un programa la claridad es un factor clave.

Mejor lo dejas así:

int *ptr1, *ptr2, *ptr3;

Que compila y te quitas de problemas.



Caster


0xDani

A ver, al compilar este programa con gcc 4.7.2:

#include <stdio.h>

int main()
{
int* a, b;
int c;

b =  &c;

printf("0x%x\n", b);

return 0;
}


me salta este aviso:


Cita de: gcc/home/dani/Escritorio/pointers_test.c:8:4: aviso: la asignación crea un entero desde un puntero sin una conversión [activado por defecto]

De lo que se deduce que b es un entero, y no un puntero.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

eferion

Cita de: 0xDani en 18 Julio 2013, 17:09 PM
A ver, al compilar este programa con gcc 4.7.2:

#include <stdio.h>

int main()
{
int* a, b;
int c;

b =  &c;

printf("0x%x\n", b);

return 0;
}


me salta este aviso:


De lo que se deduce que b es un entero, y no un puntero.

Saludos.

Vale, entonces te pasa lo mismo que a mi compilando con msvc