极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15353|回复: 5

指针的一些操作

[复制链接]
发表于 2012-10-8 23:01:52 | 显示全部楼层 |阅读模式
  1. char* numbertoString_int(long num)
  2. {
  3.         char *numberstring[10] ;
  4.         char *p;
  5.         int temp[10]={0};
  6.         int digbit,i;
  7.         boolean sign;
  8.         
  9.         if (num < 0 )
  10.         {
  11.                 sign = true;
  12.                 num = abs(num);

  13.         }
  14.        

  15.         do
  16.         {
  17.                
  18.                 digbit = num % 10 ;
  19.                 temp[i] = digbit;
  20.                 num = num / 10 ;
  21.                 i++;

  22.         } while(num>0);

  23.   
  24. p=numberstring[10];

  25.         //if (sign)       
  26.         //*p = '-';
  27. /*
  28.       for (int j = 0; j <i ; j++)
  29.       {
  30.          Serial.print("1.temp");
  31.          Serial.print( j );
  32.          Serial.print(" = ");
  33.          Serial.print( temp[j]);
  34.          Serial.println("  ");
  35.       }

  36.           Serial.print(" i ");
  37.    
  38.          Serial.print(" = ");
  39.          Serial.print( i);
  40.          Serial.println("  ");
  41.       
  42.         Serial.print("P_frist");
  43.         
  44.          Serial.print(" = ");
  45.          Serial.print( *p,HEX);
  46.          Serial.println("  ");
  47.          */
  48.         for (  i = i - 1  ; i >= 0 ; i-- )
  49.         {

  50.          *p = temp[i]+'0';
  51.          p++;
  52.          /*
  53.          Serial.print("2.temp");
  54.          Serial.print( i );
  55.          Serial.print(" = ");
  56.          Serial.print( temp[i]);
  57.          Serial.println("  ");
  58.          */

  59.         }
  60.         p = "\0";

  61. Serial.print("numberstring[]");
  62.         
  63.          Serial.print(" = ");
  64.          Serial.print( numberstring[10]);
  65.          Serial.println("  ");


  66. return numberstring[10];



  67. }

  68. void setup()
  69. {
  70.         Serial.begin(9600);

  71. }

  72. void loop()
  73. {
  74.   int l=12645;
  75.         numbertoString_int((long)l);


  76. }
复制代码


函数中的Serial。print是为了调试用的,和程序无关在这里指针p为什么不会自加啊,好像不是地址?
回复

使用道具 举报

发表于 2012-10-9 01:49:23 | 显示全部楼层
本帖最后由 test01 于 2012-10-9 02:14 编辑

C语言指针是最让人头晕,bug之源
====================
http://www.cnblogs.com/liangyan1 ... /08/11/2134833.html
====================
={0}的方式初始化数组并不规范,虽然不少编译器都会把后续整个数组初始化为0
====================
整型数转字符串可以直接调用sprintf函数,不用自己算
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-10 00:47:40 | 显示全部楼层
test01 发表于 2012-10-9 01:49
C语言指针是最让人头晕,bug之源
====================
http://www.cnblogs.com/lia ...

我不是为了输出,是给lcd传递参数的。lcd那个只能显示字符,数字是转换成字符实现的。
另外我的函数在标准C下可以正确,移植到arduino出了问题,可能是arduino对指针有bug。指针还是很方便的,以前在c下面我经常用指针操作,就是有时候回溢出。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-10 00:50:45 | 显示全部楼层
arduino中&操作不允许
回复 支持 反对

使用道具 举报

发表于 2012-10-10 12:24:56 | 显示全部楼层
给lcd弄字符串数组没问题的,开个字符数组,用sprintf函数把整型数转到字符数组,然后把字符数组传给lcd
================
arduino中&取地址可以的,我用过。1.01版的
回复 支持 反对

使用道具 举报

发表于 2012-10-10 21:22:11 | 显示全部楼层
本帖最后由 histamine 于 2012-10-10 21:37 编辑

LZ代码吐槽点很多

建议LZ重新复习C语言数组与指针有关部分

无聊献丑写一个
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <limits.h>

  5. static char *long2str( long num )
  6. {
  7.     char *p, *low, *high;
  8.     char *str = (char *)malloc( (size_t)(log10(LONG_MAX) + 3.0) * sizeof(char) );
  9.     p = str;
  10.     if ( num < 0 )
  11.     {
  12.         *(p++) = '-';
  13.         num = labs( num );
  14.     }
  15.     low = p;
  16.     do
  17.     {
  18.         int digit = num % 10;
  19.         *(p++) = digit + '0';
  20.         num /= 10;
  21.     } while ( num > 0 );
  22.     *(p--) = '\0';
  23.     high = p;
  24.     while( low < high )
  25.     {
  26.         char temp = *low;
  27.         *(low++) = *high;
  28.         *(high--) = temp;
  29.     }
  30.     return str;
  31. }

  32. static void printlong( long num )
  33. {
  34.     char *str = long2str( num );
  35.     printf( "%s\n", str );
  36.     free( str );
  37. }

  38. int main(void)
  39. {
  40.     printlong( -12645L );
  41.     printlong( 12645L );
  42.     printlong( 0L );
  43.     return 0;
  44. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-28 00:58 , Processed in 0.049852 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表