指针的一些操作
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 02:14 编辑
C语言指针是最让人头晕,bug之源
====================
http://www.cnblogs.com/liangyan19910818/archive/2011/08/11/2134833.html
====================
={0}的方式初始化数组并不规范,虽然不少编译器都会把后续整个数组初始化为0
====================
整型数转字符串可以直接调用sprintf函数,不用自己算 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下面我经常用指针操作,就是有时候回溢出。 arduino中&操作不允许 给lcd弄字符串数组没问题的,开个字符数组,用sprintf函数把整型数转到字符数组,然后把字符数组传给lcd
================
arduino中&取地址可以的,我用过。1.01版的 本帖最后由 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]