听流行歌曲用什么耳机:C语言字符数组赋值问题?

来源:百度文库 编辑:高考问答 时间:2024/04/29 08:56:17
下面这个程序是把一个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;
    }

//=======================2006/7/27  20:00补充========//
你们所说的都不是我想要的答案,请你们就我不明的两点发表意见.可以不用赋上程序,但一定要说明详细.对了,我学的是C++,C也有学过.....

//=======================2006/7/28 8:00补充========//
"不自动转换就要用强制转换
temp[i]=(char)(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 temp[])
{
int j=0,i;
for(i=0;m>0;i++)
{
temp[i]=m%2;
m=m/2;
j++;
}
for(i=j-1;i>=0;i--)
printf("%d",temp[i]);
}
main()
{
int i,a[20];
itoc(N,a);
}


用for传
for(i=0;i<i;i++)
a[j] = temp[j];
不自动转换就要用强制转换
temp[i]=(char)(m%2);

程序自己搞定

问题一:你把数组首地址传过去了,数组在内存中是线性分布的,当然能依次访问元素.
问题二不知道你说什么,不过循环好像有问题. for(int i=0;i<m;i++) 才对吧.本来在内存中,字符和整型都是一样的.