C 使用指针复制值并分割数字。

C 使用指针复制值并分割数字。,c,pointers,C,Pointers,我有三个整数变量x,y和z,还有三个指针ptr1,ptr2和ptr3 变量x的值为4 所以我要做的是只使用指针,将值x复制到y,将x除以2,然后将其添加到y,然后将结果输出到z 到目前为止,我已经有了这个(只是基本的): 也除以2。如果我这样做: ptr1 = &x/2; 这给了我一个错误 我是C语言的新手,非常感谢您的帮助 记住,&x是x的地址。所以你基本上试着把内存地址除以2 如果你想这样做,那么ptr1=&x然后ptr1/2记住,&x是x的地址。所以你基本上试着把内存地址除以2

我有三个整数变量x,y和z,还有三个指针ptr1,ptr2和ptr3

变量x的值为4

所以我要做的是只使用指针,将值x复制到y,将x除以2,然后将其添加到y,然后将结果输出到z

到目前为止,我已经有了这个(只是基本的):

也除以2。如果我这样做:

ptr1 = &x/2;
这给了我一个错误


我是C语言的新手,非常感谢您的帮助

记住,&x是x的地址。所以你基本上试着把内存地址除以2


如果你想这样做,那么ptr1=&x然后ptr1/2

记住,&x是x的地址。所以你基本上试着把内存地址除以2

ptr1 = &x;
ptr2 = &y;
*ptr2 = *ptr1;
*ptr1 /= 2;
*ptr2 += *ptr1;
ptr3 = &z;
*ptr3 = *ptr2;

如果您想这样做,那么ptr1=&x然后ptr1/2

您应该首先让指针指向变量

ptr1 = &x;
ptr2 = &y;
*ptr2 = *ptr1;
*ptr1 /= 2;
*ptr2 += *ptr1;
ptr3 = &z;
*ptr3 = *ptr2;
int* ptr1 = &x;
int* ptr2 = &y;
int* ptr3 = &z;
这并不意味着您将x复制到ptr1中。这意味着ptr1指向x

为了使用指针更改它们指向的变量的值,您需要取消对指针的引用,即使用
*
运算符

*ptr2 = *ptr1;     // Same as y = x;
*ptr1 = *ptr1 / 2; // Same as x = x / 2;
// ... and so on

首先,应该使指针指向变量

int* ptr1 = &x;
int* ptr2 = &y;
int* ptr3 = &z;
这并不意味着您将x复制到ptr1中。这意味着ptr1指向x

为了使用指针更改它们指向的变量的值,您需要取消对指针的引用,即使用
*
运算符

*ptr2 = *ptr1;     // Same as y = x;
*ptr1 = *ptr1 / 2; // Same as x = x / 2;
// ... and so on

将x的值复制到y中。可以使用以下方法执行此操作:

ptr1 = &x;//ptr1 stores the address of x
ptr2 = &y;//ptr2 stores the address of y
现在复制它:

*ptr2=*ptr1

让我为你打破上述说法

*地址
表示
地址
处的值。因此
*ptr2
意味着
y
地址处的值被赋值
*ptr1
,地址x处的值

了解这一基本逻辑后,您可以将程序编写为:

ptr1 = &x;//ptr1 stores the address of x
ptr2 = &y;//ptr2 stores the address of y
*ptr2 = *ptr1;//copy x into y
*ptr1 = *ptr1/2;//divide x by 2
*ptr2 = *ptr2 + *ptr1;//add it to y
ptr3 = &z;//ptr3 stores the address of z
*ptr3=*ptr2;//output the result in z

将x的值复制到y中。可以使用以下方法执行此操作:

ptr1 = &x;//ptr1 stores the address of x
ptr2 = &y;//ptr2 stores the address of y
现在复制它:

*ptr2=*ptr1

让我为你打破上述说法

*地址
表示
地址
处的值。因此
*ptr2
意味着
y
地址处的值被赋值
*ptr1
,地址x处的值

了解这一基本逻辑后,您可以将程序编写为:

ptr1 = &x;//ptr1 stores the address of x
ptr2 = &y;//ptr2 stores the address of y
*ptr2 = *ptr1;//copy x into y
*ptr1 = *ptr1/2;//divide x by 2
*ptr2 = *ptr2 + *ptr1;//add it to y
ptr3 = &z;//ptr3 stores the address of z
*ptr3=*ptr2;//output the result in z


无意冒犯,你需要一本基本的C语言书,这个问题不适合这里。在开始随机按下键盘按钮之前,你必须学习一些关于指针的知识……表达式
&x/2
没有意义,分割地址(指针的真正含义)根本没有意义。“我知道我可以将x复制到ptr1,但这样做是不正确的。”。您没有将
x
的值复制到该指针中。@Kevin Jones,&x/2表示将x的地址除以2。无意冒犯,您需要一本基本的C语言书,这个问题不适合这里。在开始随机按下键盘按钮之前,您必须学习一些关于指针的知识……表达式
&x/2
没有意义,将地址除以(指针的真正含义)根本没有意义。“我知道我可以将x复制到ptr1,但执行类似…”的操作是不正确的。您没有将
x
的值复制到该指针中。@Kevin Jones,&x/2表示将x的地址除以2。我如何显示输出,我尝试执行printf(“%d”,*ptr3);和一系列其他方法,但不起作用。@KevinJones printf(“%d”,*ptr3”);是正确的。应该没有问题。它显示了什么错误?我得到了不同的输出。输出是“1820794936”@KevinJones您确定您正在按照我在回答中提到的语句的确切顺序进行操作。@KevinJones请查看我更新的答案。如何显示输出,我尝试使用printf(“%d”、*ptr3)和一系列其他方法,但不起作用。@KevinJones printf(“%d”、*ptr3);是正确的。应该没有任何问题。它显示了什么错误?我得到了不同的输出。输出为“1820794936”@KevinJones您确定您遵循了我在回答中提到的语句的确切顺序吗。@KevinJones请查看我更新的回答。