易码技术论坛

 找回密码
 加入易码
搜索
查看: 431167|回复: 15

关于LAVAX的指针的问题

[复制链接]
发表于 2006-10-9 12:31:30 | 显示全部楼层
可以用 memcpy(add,&num,4)

PS:薛老师发错版了,斑竹请转到程序交流区去
 楼主| 发表于 2006-10-9 12:37:30 | 显示全部楼层
注意:我要复制的参数是long型的,并不是字符串!
 楼主| 发表于 2006-10-9 12:37:57 | 显示全部楼层
我想要用到引用,但不知道怎么用啊!
发表于 2006-10-9 12:41:50 | 显示全部楼层
lava中的数据类型没有严格区分,long 只表示这个数据占4个字节,并不管里面放的是啥东西
 楼主| 发表于 2006-10-9 12:49:51 | 显示全部楼层
我知道了,可以用:
void inputnum(long add)
{
long num;
num=65535;
(long *)add=num;//这样就可以将num的值写入地址add(也就是主函数中i的地址)中了!哈哈!
}

void main()
{
long i;
inputnum(&i);
printf("%d",i);
getchar();
}
 楼主| 发表于 2006-10-9 12:55:43 | 显示全部楼层
引用第4楼yoyohenry2006-10-09 12:41发表的“”:
lava中的数据类型没有严格区分,long 只表示这个数据占4个字节,并不管里面放的是啥东西
问题是add并不是一个变量,它是一个指向一个long型(这里指向变量 i)变量的指针,是一个地址变量,如果用memcpy写入的数据并没有放到(i)这个地址中,而是放到存放这个地址变量(add)的地址中去了!这样会导致错误的读写地址的错误!(这句话听起来有点晕!好好研究一下吧!)
LEE如果进来看到了不妨批评一下我的理解是不是正确的!谢谢!
发表于 2006-10-9 13:00:17 | 显示全部楼层
add 的值就是 i 的地址!
地址变量(add)的地址是 &add

PS:貌似LAVA1.0不支持 5 楼 的写法
发表于 2006-10-9 13:15:33 | 显示全部楼层
对,同意yoyo的。
add的地址是&add,这里是把add的值当作地址。我写过一个保存内存到闪存的函数,写的是
fwrite(0,1,65535,fp);
道理是一样的~
 楼主| 发表于 2006-10-9 13:24:17 | 显示全部楼层
引用第7楼yoyohenry2006-10-09 13:00发表的“”:
add 的值就是 i 的地址!
地址变量(add)的地址是 &add

PS:貌似LAVA1.0不支持 5 楼 的写法
你的说法是正确的,正如你所说,如果用memcpy不就相当于改了i的地址吗!那是不合法的。
这个函数我是给TC800写的!能正常使用!
发表于 2006-10-9 13:33:42 | 显示全部楼层
真不想说了,memcpy 只是改变了 地址 add 里的内容.而 地址add就是i 的地址 ,怎会如上楼所说改变 i 的地址?
下面代码已在LAVA1.0中成功编译,输出65535

void inputnum(long add)
{
long num;
num=65535;
memcpy(add,&num,4);
}
void main()
{
long i;
inputnum(&i);
printf("%d",i);
getchar();
}
 楼主| 发表于 2006-10-9 13:47:54 | 显示全部楼层
谢谢楼上,是我理解错了!
顺便问一下,LAVAX怎样计算乘方,怎么开方呢?没有相关的函数!!
还有,
%c表示字符;
%d表示整形变量;
%s表示字符串;
那么实型变量(如小数)用什么表示的呢?
发表于 2006-10-9 14:09:38 | 显示全部楼层
实数用%f
发表于 2006-10-9 14:14:13 | 显示全部楼层
  1. void inputnum(long add)
  2. {
  3.   long num;
  4.   num = 65535;
  5.   *add = number;
  6. }
复制代码
发表于 2006-10-9 17:05:44 | 显示全部楼层
 楼主| 发表于 2006-10-9 17:27:27 | 显示全部楼层
谢谢楼上的!
 楼主| 发表于 2006-10-9 12:21:41 | 显示全部楼层 |阅读模式
如:
void inputnum(long add)
{
long num;
num=65535;
........//这里要如何将num的值写入地址add(也就是主函数中i的地址)中呢?
}

void main()
{
long i;
inputnum(&i);
printf("%d",i);
getchar();
}

我发错版了,请版主给移一下!不好意思!谢谢了!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-8 12:49 , Processed in 0.012178 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表