关于char数组的问题(50分)

  • 主题发起人 主题发起人 wpyzywpy
  • 开始时间 开始时间
W

wpyzywpy

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中定义一个:aa : Array[0..1] of char
ii :integer
pp:pchar
cc :char;
cc:='2';
aa[0] := cc;

ii := 2;
move( @aa[1], pchar(@ii), sizeof(smallint) );
请问a[0]和a[1]里的是不同的,为什么啊?
在有用pchar(@ii)是什么意思,希望详细说明一下,谢谢。
 
a[0] 和a[1]的不同其实就是char 和pchar 的区别,帮助里都有的,看看帮助吧
 
但是在字符数组里却显示为a[0] 为'2' 而 a[1] 为#2(没有单引号)
 
本来就是#2呀,a[1]里面是ASCII值为2的字符。
想要存储为‘2’还要转化类型才行的
 
a[1]里面是ASCII值为2的字符到底指的是什么值呢?
这么说显示的'2'那又是什么呢?
 
你的问题我没有完全看明白
你的a的类型

如果a:String;的话
a[1]..a[n]是a字符串的字符值
a[0]好像是a的length还是什么的
 
你给的程序在Delphi7下是编译不过去的
 
按照你给的程序,a[0]在被付值后自始至终都是字符'2',而a[1]因为整个程序你都没有对其进行付值,因此应该是#0(即被初始化为ASCII值为0的字符)。
要解释清除PChar(@ii),还是加入几个变量再解释比较容易些:
pi: ^Integer;
pc: PChar;
这两个变量一个是指向整数的指针,一个是指向字符的指针,但是pi和pc本身都是一个整数(即 是一个四字节的整数),当我们使用pi^时,实际上是取了内存中连续的四个字节,然后将这四个字节合成一个整数返回给我们,pi指向的正是这四个字节的首地址;而我们使用pc^是,则是从内存中取出了一个字节。
从上面的叙述中可以得出一个结论:pi和pc本身没有什么不同,只是它们的访问能力不同(pi^可以访问四个字节,而pc^只能访问一个字节)
如果我们把一个指向整型的指针强制转换成一个指向字符的指针会怎么样呢?很简单,会缩小他的访问能力(由原来的访问四个字节变成访问一个字节),但是这个指针指向的内存都是一个地方。
再解释 PChar(@ii),因为ii被付值为2,因此@ii表示是一个指向一个数值为2的指针,因为整数在内存中占四个字节,而2本身小于255,所以,这个整数的四个字节的第一个字节中就是2,而其它三个字节都是0,即 0002。PChar(@ii)只是把一个指向整数的指针强制转换成指向字符的指针,而原来的指向整数的指针的第一个位置正好是2,所以PChar(@ii)就会返回ASCII值为2的字符
 
同意楼上的意见!
不过程序中 sizeof(smallint):=2, move( @aa[1], pchar(@ii), sizeof(smallint) )
将会存取到 @aa[2], 数组aa溢出

 
后退
顶部