写C程序时遇到用指针访问数组的问题
代码目的是实现输入一个数,把它的每个数位标记到数组里,想问问大家代码有什么问题呀(用在51单片机上的,不知道是不是这段代码出了问题)麻烦了!int Pow(int a, int b){
int c = a;
if(b==0)
{
a = 1;
}
while(b)
{
a = a * c;
b--;
}
return a;
}
int* counter(unsigned long int count)
{
unsigned long int a;//a从0开始+1直到==count,从而计算count每一位上的数字
int number, b, dight = 7;//b作临时计数变量,计算每一位的大小并赋值给数组
while(dight+1)
{
for(a=Pow(10,dight+1),b=1;a=a-Pow(10,dight),b++;a>=0)
{
if(a < count)
{
count -= a;
number = (10 - b);
break;
}
}
dight--;
}
return number;
}
void main()
{
bit flag = 1;
int checker, timer, num;//timer储存counter中的数组,num临时计数
int *pa = counter(20);//pa储存数组地址
for(num=0;num++,pa+=4;num<=7)
{
timer = *pa;
}
for(num=0;num++;num<=7)
{
if(timer == 0 && flag == 1)
{
checker = num;
flag = 0;
}
if(timer != 0 && flag == 0)
{
flag = 1;
}
}
} 本帖最后由 桃花飞舞 于 2023-2-3 01:31 编辑
你的代码不行吧!
为什么for循环这么写
for(num=0;num++,pa+=4;num<=7)//这里有pa++不行么? 而且for循环这么写不对吧改为 for(num=0;num<=7;num++,pa++;)
for(num=0;num++;num<=7) //for循环这么写不对改为for(num=0;num<=7;num++)
int* counter(unsigned long int count)函数里
int number, b, dight = 7;//b作临时计数变量,计算每一位的大小并赋值给数组
上句这句改为
int *number = malloc(8*sizeof(int));
int b = 0,dight = 7;
return number; //这样返回局部数组的地址是不正确的 具体可以把函数int* counter(unsigned long int count) 做成int* counter(int * number,int n ,unsigned long int count) ,
这样就可以返回 number,你这里的用法还不太会。
或者用上面malloc的方法来写
细节多多少少还有问题,慢慢改吧,你的程序没有给出输入输出样例,我也不好给你改错
int Pow(int a, int b)
{
if(b==0)
{
return 1;
}
b-=1;
int c = a;
while(b)
{
a = a * c;
b--;
}
return a;
}
本帖最后由 两手空空儿 于 2023-2-3 11:43 编辑
你要先把楼上兄弟们说的错误改正
我说点逻辑上的,我没看懂的的想法。。。。。。。
int* counter(unsigned long int count)
{
unsigned long int a;//a从0开始+1直到==count,从而计算count每一位上的数字
//这里注释a是从0开始
int number, b, dight = 7;//b作临时计数变量,计算每一位的大小并赋值给数组
while(dight+1)
{
for(a=Pow(10,dight+1),b=1;a=a-Pow(10,dight),b++;a>=0)
//这里a是从10^8开始 ,,,第二次循环a= a- 10^6,丢了7啊
//假如补上7,第一次a=10^8, 第二次 a= 10^8 - 10^7 = 10, 这不合理,怎么拿到每一位的数字?
{
if(a < count)
{// 这一段我没看明白 参数count = 20传进来, 当a=10时进入这里
count -= a; // count = 10
number = (10 - b); // 10 -循环次数(b) ,这是想记录什么??????
break; //想遍历这里应该是用 continue,要不if只进一次就结束while循环了
}
}
dight--;
}
return number;
}
还有第45行for(num=0;num++,pa+=4;num<=7)
这里可能也有问题, C51是8位机,要确认一下你的环境int是不是4个字节 ,要不pa += 4 一下就超了, 没有必要手动,已经定义了pa 是int 型, 直接p++就是下一个int的位置了
//一般我们提取各个位上的数字是用求余的方式
int count = 56214;//待分析数字
int dig;//存放拿到的一位数字
for( ; count > 0; count /= 10)
{ //从个位开始拿到每一位数字
dig = count % 10;
printf("%d\n", dig);
}
// 这一段会输出
// 4
// 1
// 2
// 6
// 5
页:
[1]