elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Punteros y arrays.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Punteros y arrays.  (Leído 2,375 veces)
Gojira

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Punteros y arrays.
« en: 3 Marzo 2018, 12:40 pm »

He intentado asignar a un puntero la variable x que es de tipo entero directamente, y me pedia el operador de referencia.

int * ptr = x; //no me deja
int * ptr = &x; //si me deja

Luego he creado un array, y he intentado asignar a un puntero el array con el operador de referencia, y me pedia que le quitara el operador de referencia y apuntara directamente al array.

int x[5] = {1,2,3,4,5};

int * ptr = x; //si me deja
int * ptr = &x; //no me deja

¿Por que es eso?
¿Los arrays son un conjunto de punteros, x seria la direccion del valor de la primera celda del array x en realidad y int * ptr = &x es pedir la direccion de una direccion?


« Última modificación: 3 Marzo 2018, 12:46 pm por Gojira » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Punteros y arrays.
« Respuesta #1 en: 3 Marzo 2018, 13:38 pm »

Cómo ya te he dicho en otros mensajes sobre punteros, el nombre de un array es la dirección del primer elemento. Por eso lo puedes y debes asignar directamente.


En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Punteros y arrays.
« Respuesta #2 en: 3 Marzo 2018, 15:05 pm »

x equivale a &x[0], por eso
No puedes hacer:
int * ptr = &x;

Pero puedes hacer:
int * ptr = &x[0];

x y &x[0] son lo mismo, como ya te lo han dicho.
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Punteros y arrays.
« Respuesta #3 en: 4 Marzo 2018, 03:24 am »

enrealid es por que en c solo pudes asignar o igualar valores del mismo tipo,
int = variable de interos
& operador de direccion (solo cuando esta acompañado de una variable ejm &x)
*  operador de indireccion (solo cuando esta acompañado de una variable ejm *x)
entonces si los combinamos obtenemos:
int a = 20; // variable de tipo entero
int* x = &a; // una variable que almacena direcciones de memoria de tipo entero
int* b = x;  // una variable que almacena direcciones de memoria de tipo entero (y como x es un puntero no necesitamos agregar el operador de diseccionar)

bien ahora para usar los punteros se usa el operador de indireccion
*x += 10;

con esto modificamos el valor de la variable a la cual apunta x y be ya que es la misma dirección porque la igualamos a la dirección a la que apunta x.

bie haora que pasa con un
int x[5] = {1,2,3,4,5};

lo que estamos haciendo aqui es declarar 5 punteros de tipo int consecutivos osea uno después del otro,

y si hacemos un cout << *x << endl; imprimimos imprimimos el primer elemento de x (x[0] seria lo mismo) y para recorrerlo hacemos un *x++ y nos iriamos a la siguiente posición (lo cual no recomido si no dominas el tema de los punteros ya que con esto bas saltando en la memoria ram (int) bits (int = 4 bits))

por lo tanto si hacemos un
int x[5] = {1,2,3,4,5};
int* b = x; //obtenemos la primera posicion de x ya que x es un puntero

te dejo un codigo de ejemplo:

Código:
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {
int a = 20;
int* x = &a;
int* b = x;
int r[5] = {1,2,3,4,5};
int* c = r;

cout << "antes" << endl;
cout << "valor de a: " << a << " valor de x: " << *x << " valor de b: " << *b <<endl;
*x += 10;
cout << "despues" << endl;
cout << "valor de a: " << a << " valor de x: " << *x << " valor de b: " << *b <<endl;
cout << endl;
cout << "valor de c: " << *c << endl;
*c++;
*c++;
*c++;
cout << "valor de c + 3 pociciones: " << *c << endl;

return 0;
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Punteros y arrays
Programación C/C++
cazagavilan 4 2,551 Último mensaje 14 Abril 2012, 19:32 pm
por cazagavilan
Algun Documentos para Punteros y arrays?
Programación C/C++
x64core 4 2,203 Último mensaje 25 Julio 2012, 01:17 am
por david_BS
Ayuda con arrays y punteros « 1 2 »
Programación C/C++
nanto 13 5,343 Último mensaje 5 Marzo 2014, 06:17 am
por leosansan
arrays y punteros.
Programación C/C++
4dr14n31t0r 1 1,714 Último mensaje 24 Septiembre 2016, 04:59 am
por geeke
ejercicios de arrays y punteros
Programación C/C++
luis9829 0 1,816 Último mensaje 27 Agosto 2017, 03:00 am
por luis9829
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines