我是该语言的新手,正在尝试一个简单的代码。我想尝试创建一个基于指针的循环。但似乎你不能像汇编程序那样提升variate位置。或者我只是做错了?如果我真的不能强迫新的变量出生在特定的位置?那是我的代码
#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;
}
}
}
我知道这可能看起来很荒谬,但我真的很好奇
答案 0 :(得分:0)
不,您无法宣传/更改变量位置。
所以这个:
int num;
&num +=2;
没有意义,会导致错误:
error: lvalue required as left operand of assignment
&num +=2;
^~
同样的:
int assist;
&assist += 2;
只有修改了这些语句才会编译代码(但现在逻辑已经改变,你应该继续),但现在它会导致无限循环,因为你的函数永远不会返回在else
案例中:
#include <stdio.h>
void Test1 (int num, int* begin);
int main(void) {
int firstnumber = 1;
int *beginning = &firstnumber;
printf("%i %i \n",firstnumber, *beginning);
Test1(firstnumber, beginning);
return 0;
}
void 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;
}
}
}
祝你好运!
答案 1 :(得分:0)
你正在考虑倒退。指针是您可以移动的变量,因此请将它们用于您想要移动的任何内容。
firstnumber
是一个整型变量 - 编译器决定它的存储位置,你不能告诉编译器将名称firstnumber
重新绑定到另一个位置。但是,您可以根据需要移动指针。所以,
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
会损坏您的堆栈帧或其他不应该触及的内存。< / p>
答案 2 :(得分:0)
好的,我更深入地检查了代码并得出了几个结论:
函数变量不能继承他的祖先地址。因此,除非我使用一些静态变量
,否则使用该任务的函数是无用的我得到了另一个结论,但我不记得它是什么。抱歉,谢谢你的时间