如何将指针传递给函数

时间:2010-12-11 00:26:13

标签: c++ pointers

我正在尝试将数组指针传递给类的方法,因此该方法可以对数组进行操作。

然而,当我通过它时,地址似乎发生了变化。

指针是成员变量。

基本上我这样做:

unsigned char array[1000];
unsigned char * pointer = array;
printf("p%", &pointer);

setup(pointer);

void setup(unsigned char* pointer){
  unsigned char * p = pointer;
  printf("p%", &p);
}

9 个答案:

答案 0 :(得分:3)

您正在打印指针变量的地址。在第一种情况下,它是pointer的地址作为局部变量,而在第二种情况下,它是pointer的地址作为函数参数。从逻辑上讲,它们具有不同的地址,但它们的值相同,即array的地址。您需要从printfs中删除&

答案 1 :(得分:3)

&pointer正在查找指针的地址,而不是数组的地址。你只想要printf("%p", pointer);

答案 2 :(得分:1)

你正在打印新分配的char * p的地址,不是吗?

答案 3 :(得分:1)

unsigned char array[1000];
Unsigned char * pointer = array;
printf("p%", &pointer);

您正在打印变量'指针'的地址。

Setup(pointer);

您将值'变量'指针'传递给'Setup'。

Void setup(unsigned char* pointer){

你已经通过名为'pointer'的值接受了一个变量,因此它已经为你创建并使用调用该函数的值进行初始化。

Unsigned char * p = pointer;

你已经创建了另一个名为'p'的变量,该变量使用'指针'中保存的相同值进行初始化。

printf("p%", &p);

您正在打印此新变量的地址。当然,它位于记忆中的不同位置,因为它与您首次打印的变量不同。

}

请查看此文章:http://crazyeddiecpp.blogspot.com/2010/12/pet-peeve.html

答案 4 :(得分:1)

unsigned char * pointer = array;
printf("%p", &pointer);

您不是在这里打印array的地址;您正在打印pointer的地址。 pointer内容代表array地址,所以我想你 这里需要printf("%p", pointer);

答案 5 :(得分:0)

您正在创建一个新变量,然后获取其地址。

您需要参数中原始pointer的地址。

答案 6 :(得分:0)

这里有很多好的答案,但在我看来,没有一个真正说明关键概念,即除非另有说明,否则变量通常按C ++中的值传递。

在你的函数“setup”中,你实际上是在询问指针的地址,而不是数组的地址(这是指针包含的内容。)因为这个指针是按值传递给你的函数的,所以它是原始指针的副本。这就是为什么它有不同的地址。

答案 7 :(得分:0)

pointerp是单独的变量,因此它们具有不同的地址,尽管它们指向相同的位置。也许您打算使用dereference operator *而不是address operator &

如果你想检查它们是否都指向相同的内存地址,那么你应该自己输出指针,而不是那些指针的地址。

E.g。

printf("%p", pointer);

答案 8 :(得分:0)

setup(&pointer);//pass with its address

void setup(unsigned char** pointer){// make one for address, one for array
    ...
}