C语言字符数组赋值问题?

来源:百度知道 编辑:UC知道 时间:2024/05/10 12:43:00
下面这个程序是把一个10进制数转换成2进进制数,由数组返回;
我有两点不明:
1:void itoc(int,char []);这个函数的形参是char[],传递的是地址;那是怎么把把数组元素传到数组的.
2:temp[i]=m%2;左边是字符开型的,右边是整型的,为什么这个程序中不会自动转换?

编译通过,但结果不是我想要的!!希望调试通过,给我代码?还有解释我提出的两个问题...    
#include <iostream.h>
#include "string.h"
void main()
{
    void itoc(int,char []);//函数声明

    char a[20];
    itoc(7,a);
    cout<<a[i];

}
void itoc(int m,char temp[])//函数体
{
    for(int i=0;m>0;i++)
    {
        temp[i]=m%2;
&    }
}
那个函数在复制时少了点东西,补上:
for(int i=0;m>0;i++)
    {
        temp[i]=m%2;
        m=m/2;
 

这个itoc是按照十进制数不断除以2除余数的方法来实现的,所以最后要将余数倒置才是正确的结果。

首先,字符串里存的是字符'0'和'1',所以
for(int i=0;m>0;i++)
{
temp[i]=m%2+'0' //这里要加上'0'
m/=2;
}
然后,加上
for(int j=0;j<i/2;j++)
{
char t=temp[j];
temp[j]=temp[i-j-1];
temp[i-j-1]=temp[j];
}
最后,加上字符串结束符
temp[i]='\0';

关于你的问题:
1、C语言里,数组就是用其首地址表示的,所以传地址就相当于传数组
2、C语言认为所有的数据都是二进制存放的,所以可以通过类型强制来任意转换,不过不会改变二进制数值。这里m%2后结果为0或1,int会自动转换为char型数据传给temp[i],不过传的仍然是值为0或1的char数据,而不是字符'0'和'1'。

先说第二点
m % 2 自动转换? 估计你以前是学VB 的吧。C 语言不是这样的。m % 2 代进去的是 ASCII 值。它本身就是数字当然不转换了。
要把文本转化成数 这么写 (m-'0') % 2

再说第一点
C 语言中 并不需要那样。
temp[3] 表示的 是 *(temp + 3)。 不知你能不能理解这一点。所以只要把地址传递过去。temp[i]引用的就是原来的数组

最后说一下你的程序还存在的问题:

函数声明要放在main(){} 外面!
而且没有 输入语句!

C语言~~~~~~~~~~~~~~
#include<stdio.h>
#define N 7
itoc(int m,int tem