位移与C指针
我正在寻找在C程序中实现一个堆栈,我正在考虑使用无符号字符*作为基础。这将是堆栈的底部,所有其他寄存器和信息将是这个地址的替代。但是,我似乎无法理解如何正确执行此操作。我想这样做是这样的......位移与C指针
//Info: Store 20 at address x0000007c
unsigned char * base = 0;
int address = x0000007c;
(base + address) = 20;
的C编译器不喜欢这个,所以我不知道如何解决这个问题还是没有失去我的指针类似的东西。
编译器不喜欢你的代码,因为它在概念上是错误的; base +地址不是左值,即使它有错误的类型:你不能将int存储到char *中。但是,这在逻辑上是正确的:
base[address] = 20;
,或者等价地,
*(base + address) = 20;
虽然因为基地没有指向有效的内存是不正确的功能。您需要分配你的筹码,无论是作为一个静态数组或通过的malloc,并将其分配给基地,如
unsigned char* base = malloc(STACKSIZE);
if (!base) out_of_memory();
谢谢你的帮助!我从来没有用malloc分配内存,所以我得到了分段错误。 – 2013-04-24 04:31:16
@melchyy如果我的回答对你有帮助,那么你可以放弃它,并在几分钟内接受它。 – 2013-04-24 04:35:16
@Balter我其实没有足够的代表upvote,但我会接受它! – 2013-04-24 04:39:03
对于一个堆栈,最简单的可能是使用两个指针,
enum { STACKSZ = 100 };
char *base = malloc(STACKSZ);
char *top = base;
然后你就可以用
*top++ = 'H';
推动与
char x = *--top;
弹出
,并得到大小与
int sz = top-base;
注意此代码不检查堆栈过/欠流。
不知道我得到的问题。你不能只设置一个指向你喜欢的某个值的指针,然后离开你去。指针必须指向某个有效的东西。 – John3136 2013-04-24 04:22:36
奇怪。你使用了一个指针变量来存储一个整数值,并使用一个整数来存储一个“地址”(它实际上不是一个地址)。为什么?你在读哪本书? – Sebivor 2013-04-24 04:55:12
@undefinedbehaviour这是一本来自C教科书的Y86模拟器程序。此分配旨在教导读取和执行循环。 – 2013-04-24 05:08:29