BandaAncha.eu

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

duda c

BocaDePez
BocaDePez

hola tengo una duda del lenguaje c
como no hay un foro especifico lo pongo aqui.
cuando se declara la variable char *argv[] en la funciona main, porque no se le pone tamaño?
es el unico array que puede declararse sin especificar el tamaño?
que es exactamente? un puntero a cadenas de caracteres? un array de punteros?
a que variable se inicializa?
es que es distinto a los demas y me estoy liando.
gracias

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
BocaDePez
BocaDePez

Por que te complicas la vida con historias de punteros, arrays y demas? Se declara asi por convenio, asi esta estipulado, y asi lo aceptan los compiladores que siguen el standar, e incluso los demas.

No te calientes el tarro con esas cosas, que con C tienes material de sobra para comerte la olla :-)

Salu2

🗨️ 1
Frankie2004

Pues precisamente porque es un lenguaje que no tiene por sí solo asignación automática de tamaño, como en otros lenguajes interpretados tipo Java o Perl, es muy importante que sepa qué es un puntero y si éste está asociado a variables con espacio de memoria reservado correctamente.

Que los compiladores son buenos, pero no infalibles ... y que los agujeros de seguridad vienen por problemas de punteros en programas no lo suficientemente robustos (si has hecho la carrera, robusto significa que contempla todos los casos de entrada para producir salidas correctas o mensajes de error en caso contrario).

BocaDePez
BocaDePez

pero quiero saber eso para entenderlo.
por lo que puedo ver argv[] es un array de punteros, pero es un array de punteros a cadenas de caracteres o un array de punteros a caracteres?
cuando le mandamos un parametro al programa desde la line a comandos, que hace exactamente? va metiendo letra por letra en una variable y inicializa los punetos a esas variables? directamente asigna los caracteres a los punteros?
en una funcion normal se podria hacer lo mismo? como seria?
saludos

🗨️ 8
BocaDePez
BocaDePez

Es un array de punteros a caracteres, o dicho de otra forma, un array de cadenas de caracteres.

La sintaxis de la función main es así:

int main(int argc, char *argv[]) { ... }

argc contiene el número de argumentos que le pasas al programa por línea de comandos (incluyendo el propio programa)

argv es el array con los parámetros, siendo la primera posición (argv[0]) la ruta completa del programa.

Ejemplo: c:\miprograma.exe a1 a2

argc=3
argv[0]="c:\miprograma.exe"
argv[1]="a1"
argv[2]="a2"

Saludos

🗨️ 7
BocaDePez
BocaDePez

gracias a ti y a frankie 2004.

cuando dices esto "Es un array de punteros a caracteres, o dicho de otra forma, un array de cadenas de caracteres" no lo acabo de entender.

1-si es un array de punteros solo a caracteres( no a cadenas), como es que cada elementos del array muestra una cadena completa?

2-o te refieres que cada elemento del array va recorriendo la cadena caracter a caracter?

3-esto son punteros, en que variable se almacenan los datos?

4-o es que un puntero puede apuntar a una direccion de memoria, que contiene un dato, pero que no esta en ninguna variable?

5-se pueden meter y utilizar datos (por ejemplo enteros) en memoria solo con punteros? (sin utilizar variables)

saludos y muchisimas gracias al que me ayude

🗨️ 6
srg84

Te estas liando.

1- una cadena de caracteres son varios "caracteres", te estas liando.

Es un array de punteros a caracteres porque aunque apunta cada uno a una cadena de caracteres, todo son caracteres.

argv es una variable y argc otra.

argv -> argument values.
argc -> argument count.

argv contiene todos los parámetros y el nombre del programa y argc el número de parámetros, como te han dicho arriba.

🗨️ 5
BocaDePez
BocaDePez
🗨️ 4
BocaDePez
BocaDePez
🗨️ 1
srg84
Frankie2004
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

otra duda que me ha surgido ahora:
p[i] ////es un array
*p[i] ////es un array de punteros
(*p)[i] ////es un puntero a un array
**p ////tambien seria un array de punteros,
1 ¿pero en este caso que asterisco seria el array de punteros y cual el puntero al array?

2 ¿es decir teniendo esto *(*(puntero+i)+j) lo de dentro seria un puntero, un array o un puntero a un array?

3 ¿y lo de fuera?

4 ¿el nombre del puntero al array es el mismo que el del propio array y el mismo que los elementos del array?

5 ¿podeis explicarme un poco esto: (*p)[i]?
¿porque se declara un puntero a un array asi, si el propio identificador de un array normal ya es un puntero al primer elemento del array?
¿que diferencias habria con p[i]?
¿(*p) se esta comportando aqui como un modificador de tipo?¿los modificadores de tipo se pueden aplicar solo a expresiones evaluables o tambien a variables?
¿cual seria el nombre del array en el primer caso: (*p)[i]?
¿o no tendria nombre el propio array?
¿se utilizan de manera diferente p[i] y (p*)[i]?
¿un array es simplemente declarar un puntero y reservar espacio en memoria, pero automaticamente?¿hay alguna diferencia mas entre array y puntero?¿se puede utilizar [i] con un puntero para indicar una posicion, o solo se podria +i?

se que son muchas preguntas, pero agradezco muchisimo cualquier tipo de ayuda, ya que entender bien estos conceptos es fundamental para entender la sintaxis del lenguaje.
mas o menos entiendo la idea de puntero, pero son dudas muy concretas que me planteo. voy haciendo pruebas de todo tipo en el ide, pero estas explicaciones me aclararian mucho.
si me contestais todas las preguntas sois mis idolos
gracias

🗨️ 2
BocaDePez
BocaDePez

una subida.
esto a alguien que controle todos los conceptos de c le tiene que ser facilisimo responderlo, en cambio yo le estoy dando vueltas y cada vez me lio mas.
saludos

BocaDePez
BocaDePez

hago una ultima subida ya por desesperacion hehe.
no me creo que en bandaancha con todos los ingenieros informaticos que hay nadie sepa o quiera contestarme a esto.
en que parte del foro seria mas correcto preguntarlo?
en gnu?
saludos

BocaDePez
BocaDePez

contestar alguno porfa