萧芸凤 发表于 2012-10-8 23:01:52

指针的一些操作

char* numbertoString_int(long num)
{
        char *numberstring ;
        char *p;
        int temp={0};
        int digbit,i;
        boolean sign;
      
        if (num < 0 )
        {
                sign = true;
                num = abs(num);

        }
       

        do
        {
               
                digbit = num % 10 ;
                temp = digbit;
                num = num / 10 ;
                i++;

        } while(num>0);


p=numberstring;

        //if (sign)       
        //*p = '-';
/*
      for (int j = 0; j <i ; j++)
      {
         Serial.print("1.temp");
         Serial.print( j );
         Serial.print(" = ");
         Serial.print( temp);
         Serial.println("");
      }

          Serial.print(" i ");
   
         Serial.print(" = ");
         Serial.print( i);
         Serial.println("");
      
      Serial.print("P_frist");
      
         Serial.print(" = ");
         Serial.print( *p,HEX);
         Serial.println("");
         */
        for (i = i - 1; i >= 0 ; i-- )
        {

         *p = temp+'0';
         p++;
         /*
         Serial.print("2.temp");
         Serial.print( i );
         Serial.print(" = ");
         Serial.print( temp);
         Serial.println("");
         */

        }
        p = "\0";

Serial.print("numberstring[]");
      
         Serial.print(" = ");
         Serial.print( numberstring);
         Serial.println("");


return numberstring;



}

void setup()
{
        Serial.begin(9600);

}

void loop()
{
int l=12645;
        numbertoString_int((long)l);


}

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

test01 发表于 2012-10-9 01:49:23

本帖最后由 test01 于 2012-10-9 02:14 编辑

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

萧芸凤 发表于 2012-10-10 00:47:40

test01 发表于 2012-10-9 01:49 static/image/common/back.gif
C语言指针是最让人头晕,bug之源
====================
http://www.cnblogs.com/lia ...

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

萧芸凤 发表于 2012-10-10 00:50:45

arduino中&操作不允许

test01 发表于 2012-10-10 12:24:56

给lcd弄字符串数组没问题的,开个字符数组,用sprintf函数把整型数转到字符数组,然后把字符数组传给lcd
================
arduino中&取地址可以的,我用过。1.01版的

histamine 发表于 2012-10-10 21:22:11

本帖最后由 histamine 于 2012-10-10 21:37 编辑

LZ代码吐槽点很多

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

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

static char *long2str( long num )
{
    char *p, *low, *high;
    char *str = (char *)malloc( (size_t)(log10(LONG_MAX) + 3.0) * sizeof(char) );
    p = str;
    if ( num < 0 )
    {
      *(p++) = '-';
      num = labs( num );
    }
    low = p;
    do
    {
      int digit = num % 10;
      *(p++) = digit + '0';
      num /= 10;
    } while ( num > 0 );
    *(p--) = '\0';
    high = p;
    while( low < high )
    {
      char temp = *low;
      *(low++) = *high;
      *(high--) = temp;
    }
    return str;
}

static void printlong( long num )
{
    char *str = long2str( num );
    printf( "%s\n", str );
    free( str );
}

int main(void)
{
    printlong( -12645L );
    printlong( 12645L );
    printlong( 0L );
    return 0;
}
页: [1]
查看完整版本: 指针的一些操作