Autor Tema: Duda de punteros  (Leído 2827 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Duda de punteros
« en: 06 de Abril de 2020, 04:25:06 »
Saludos

Los expertos en punteros me pueden decir y corregir si es posible escribir la funcion sin necesidad de declarar las variables nuevamente, en mi ignorancia digo que seria como usar el doble de memoria.

aqui se pueve verificar el codigo
https://www.onlinegdb.com/online_c_compiler#
Código: C
  1. #include <stdio.h>
  2.  
  3. int SIM800L_AT_SAPBR(int np, int cmd_type,int cid, char *ConParamTag, char *ConParamValue)
  4. {                                  
  5.      int  i =np;
  6.      int  c_cmd_type=cmd_type;      
  7.      int  c_cid=cid;                
  8.      char *c_ConParamTag=ConParamTag;        
  9.      char *c_ConParamValue=ConParamValue;  
  10.      
  11.      
  12. if (i==4)                
  13.    printf("AT+SAPBR=%d,%d,%s,%s\r\n",c_cmd_type,c_cid,c_ConParamTag,c_ConParamValue);                                        
  14. else
  15.   printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);  
  16.  
  17.  
  18.    return 0 ;
  19. }  
  20.  
  21.  
  22. int main()
  23. {
  24.             SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");                
  25.             SIM800L_AT_SAPBR(4,3,1,"APN","internet.movistar.com.co");                
  26.             SIM800L_AT_SAPBR(2,1,1,0,0);
  27.             SIM800L_AT_SAPBR(2,2,1,0,0);    
  28.     return 0;
  29. }



Quiero que sea asi:
Código: C
  1. int SIM800L_AT_SAPBR(int np, int cmd_type,int cid, char *ConParamTag, char *ConParamValue)
  2. {                                  
  3.      int  np;  
  4.  
  5. if (i==4)                
  6.    printf("AT+SAPBR=%d,%d,%s,%s\r\n",cmd_type,cid,ConParamTag,ConParamValue);                                        
  7. else
  8.   printf("AT+SAPBR=%d,%d\r\n",cmd_type,cid);  
  9.  
  10.    return 0 ;
  11. }
al usarla de esa forma, no funciona,no imprime nada, no se va al direccion de memoria donde esta el dato supongo.

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:Duda de punteros
« Respuesta #1 en: 06 de Abril de 2020, 10:22:33 »
A mi me funciona!, lo probe en el compilador online que sugieres! da un problema con la variable i por lo que la cambie por np como se muestra en la imagen.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda de punteros
« Respuesta #2 en: 06 de Abril de 2020, 10:48:51 »
El código necesario es el que escribió uZYNQ, y es lo mínimo (sin check de parametros) para lo que planteas.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Duda de punteros
« Respuesta #3 en: 06 de Abril de 2020, 14:47:25 »
Gracias,

Que curioso... lo compile mil veces y no funcionó.... y ahora si.
incluso en ese compilador y en en CCS.   no se que estaba hciendo.... ya dormido supongo. :D

Gracias.


Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Duda de punteros
« Respuesta #4 en: 09 de Abril de 2020, 06:22:31 »
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda de punteros
« Respuesta #5 en: 09 de Abril de 2020, 11:24:16 »
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.

Que raro, ya que cuando haces

Código: C
  1. SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");

En realidad lo que estas haciendo es enviar el puntero al string, ya que ese string se considera constante y se guarda en la FLASH, CCS deberia hacer lo mismo. Ya que tambien se utiliza en los printf:

Código: C
  1. printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Duda de punteros
« Respuesta #6 en: 09 de Abril de 2020, 12:33:16 »
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.

Que raro, ya que cuando haces

Código: C
  1. SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");

 

En realidad lo que estas haciendo es enviar el puntero al string, ya que ese string se considera constante y se guarda en la FLASH, CCS deberia hacer lo mismo. Ya que tambien se utiliza en los printf:

Código: C
  1. printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);

  Vale, rectifico. Ahora que lo dices lo he probado y si, va perfecto. Juraría haberme peleado con esto bastante y no conseguirlo.


 

anything