我是这门语言的新手,正在尝试一个简单的代码。我想尝试创建一个基于指针的循环。但似乎您无法像汇编程序中那样提升变量位置。或者我只是做错了?如果我真的不能,我可以强制一个新的变量在特定位置出生吗?那是我的代码
#include <stdio.h>
int main(void) {
int firstnumber = 1;
int *beginning = &firstnumber;
printf("%i %i \n",firstnumber,beginning);
Test1(firstnumber,beginning);
return 0;
}
Test1 (int num, int begin)
{
int reserve = num;
if(num != 100)
{
&num +=2;
num = (reserve+1);
return Test1(num, begin);
}
else
{
int assist = begin;
while(*assist != 100)
{
printf("/n \n %i %i \n /n",num,assist);
&assist += 2;
}
}
}
我知道这可能看起来很荒谬,但我真的很好奇
最佳答案
你在逆向思考这个问题。指针是您可以移动的变量,因此将它们用于您想要移动的任何内容。
firstnumber
是一个整型变量 - 编译器决定它的存储位置,并且您不能告诉编译器将名称 firstnumber
重新绑定(bind)到其他位置。不过,您可以随意移动指针。所以,
void Test1(int num) {
&num +=2;
num = 42;
}
废话,但是
void Test2(int *num) {
num += 2;
*num = 42;
}
没问题 - 只要 num+2
仍然是有效的分配对象。例如,您可以这样调用它
int i[5];
Test2(i); /* sets i[2] = 42 */
(如果您传入少于 3 个整数的数组,则会出现运行时错误而不是编译错误,因为 Test2
会损坏您的堆栈帧或其他不应触及的内存)。
关于C - 可以提升变量位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844792/