我正在尝试将数组指针传递给类的方法,因此该方法可以对数组进行操作。
然而,当我通过它时,地址似乎发生了变化。
指针是成员变量。
基本上我这样做:
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);
}
答案 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)
pointer
和p
是单独的变量,因此它们具有不同的地址,尽管它们指向相同的位置。也许您打算使用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
...
}