C++ C++;函数调用中的指针表示

C++ C++;函数调用中的指针表示,c++,pointers,C++,Pointers,我最近在浏览谷歌的网站时,遇到了演示指针的问题 void Unknown(int *p, int num); void HardToFollow(int *p, int q, int *num); void Unknown(int *p, int num) { int *q; q = # *p = *q + 2; num = 7; } void HardToFollow(int *p, int q, int *num) { *p = q + *num; *num

我最近在浏览谷歌的网站时,遇到了演示指针的问题

void Unknown(int *p, int num);
void HardToFollow(int *p, int q, int *num);

void Unknown(int *p, int num) {
 int *q;

 q = #
 *p = *q + 2;
 num = 7;
}

void HardToFollow(int *p, int q, int *num) {
 *p = q + *num;
 *num = q;
 num = p;
 p = &q;
 Unknown(num, *p);
}

main() {
 int *q;
 int trouble[3];

 trouble[0] = 1;
 q = &trouble[1];
 *q = 2;
 trouble[2] = 3;

 HardToFollow(q, trouble[0], &trouble[2]);
 Unknown(&trouble[0], *q);

 cout << *q << " " << trouble[0] << " " << trouble[2];
}
void未知(int*p,int num);
void hardtoollow(int*p,int q,int*num);
无效未知(int*p,int num){
int*q;
q=&num;
*p=*q+2;
num=7;
}
void hardtoollow(int*p,int q,int*num){
*p=q+*num;
*num=q;
num=p;
p=&q;
未知(num,*p);
}
main(){
int*q;
智力障碍[3];
故障[0]=1;
q=&麻烦[1];
*q=2;
故障[2]=3;
HardToFollow(q,麻烦[0],&麻烦[2]);
未知(&故障[0],*q);

cout因为函数未知中不使用主函数中的指针q

该函数仅与名为num的指针的值一起工作,因为在函数未知中,不与主函数中的指针q一起工作

该函数仅适用于名为num的指针的值。我添加了一些注释,以明确说明:

void HardToFollow(int *p, int q, int *num) {
  /* this modifies the value pointed to by p */
  *p = q + *num;
  *num = q;
  num = p;
  /* this does not modify the original pointer */
  p = &q;
  Unknown(num, *p);
}
[…]

  /* the memory address q points to is copied to the function scope */
  HardToFollow(q, trouble[0], &trouble[2]);

我添加了一些注释,以明确说明:

void HardToFollow(int *p, int q, int *num) {
  /* this modifies the value pointed to by p */
  *p = q + *num;
  *num = q;
  num = p;
  /* this does not modify the original pointer */
  p = &q;
  Unknown(num, *p);
}
[…]

  /* the memory address q points to is copied to the function scope */
  HardToFollow(q, trouble[0], &trouble[2]);

您不能通过传递值将
main::q
传递给
hardtoollow
函数来简单修改
main::q
函数。因为您将
q
作为传递值传递给它,所以在
hardtoollow
中,您可以通过
p
p
本身修改
q
指向poi的内容我不想做别的事

稍微修改示例将实现您所期望的:

void HardToFollow(int*& p, int q, int *num) {
 *p = q + *num;
 *num = q;
 num = p;
 p = &q;
 //Unknown(num, *p); //forget about this for now
}

您不能通过传递值将
main::q
传递给
hardtoollow
函数来简单修改
main::q
函数。因为您将
q
作为传递值传递给它,所以在
hardtoollow
中,您可以通过
p
p
本身修改
q
指向poi的内容我不想做别的事

稍微修改示例将实现您所期望的:

void HardToFollow(int*& p, int q, int *num) {
 *p = q + *num;
 *num = q;
 num = p;
 p = &q;
 //Unknown(num, *p); //forget about this for now
}

您在何处看到更改了
q
指针的内容?
q
指针不是“在此函数中称为p”。该函数有一个名为
p
的指针,该指针以与
q
指针相同的值开始。请注意,这些指针不是“c++”虽然C和C++指针大部分是用同样的方式来处理的,但它们不是同一个东西。C和C++是不同的语言;我们不能混合它们。在哪里你看到了一些改变了<代码> Q>代码>指针的东西?<代码> q>代码>指针不是“调用这个函数的P”。该函数有一个名为 P</C>的指针,其值与 Q> /Cuff>指针相同。注意这些不是“C++”,而是旧的普通C指针。@ IGORR。C++和C++指针在很大程度上以类似的方式起作用,它们不是同一个东西。C和C++是不同的语言;我们不混合它们。