C 有人能解释为什么指针的地址在被另一个函数调用时会发生变化吗?如何使nPtr=Ptr?
我注意到我的指针地址在传递给函数时是不同的。您不确定是否访问函数中存在的值?请不要建议从函数返回指针C 有人能解释为什么指针的地址在被另一个函数调用时会发生变化吗?如何使nPtr=Ptr?,c,C,我注意到我的指针地址在传递给函数时是不同的。您不确定是否访问函数中存在的值?请不要建议从函数返回指针值。我严格地想使用void函数 输出: &nPtr=6422300 &Ptr=6422272 &nPtr=6422300 请参阅以下代码: #include<stdio.h> void myFunc(int *Ptr){ printf("&Ptr = %d\n", &Ptr); }; void main(){ int *nPt
值。我严格地想使用void函数
输出:
&nPtr=6422300
&Ptr=6422272
&nPtr=6422300
请参阅以下代码:
#include<stdio.h>
void myFunc(int *Ptr){
printf("&Ptr = %d\n", &Ptr);
};
void main(){
int *nPtr;
printf("&nPtr = %d\n", &nPtr);
myFunc(nPtr);
printf("&nPtr = %d\n", &nPtr);
}
#包括
无效myFunc(int*Ptr){
printf(“&Ptr=%d\n”、&Ptr);
};
void main(){
国际*nPtr;
printf(“&nPtr=%d\n”,&nPtr);
myFunc(nPtr);
printf(“&nPtr=%d\n”,&nPtr);
}
让我更清楚一点。这是我试图修复的代码。我所要做的就是让两个指针指向同一个地址。我想使用最佳编码实践#include<stdlib.h>
#include<stdio.h>
void myFunc(int *Ptr){
Ptr = malloc(10*sizeof(int));
printf("*Ptr = %d\n", *Ptr);
};
void main(){
int *nPtr;
printf("*nPtr = %d\n", *nPtr);
myFunc(nPtr);
printf("*nPtr = %d\n", *nPtr);
}
#包括
#包括
无效myFunc(int*Ptr){
Ptr=malloc(10*sizeof(int));
printf(“*Ptr=%d\n”,*Ptr);
};
void main(){
国际*nPtr;
printf(“*nPtr=%d\n”,*nPtr);
myFunc(nPtr);
printf(“*nPtr=%d\n”,*nPtr);
}
在main()
中,您将在main()
的堆栈框架中获得nPtr
的地址;在myFunc()
中,您得到的是nPtr
副本的地址,该副本通过值传递给myFunc()
作为Ptr
(因此您实际上得到的是Ptr
,它是不同的),并且存在于myFunc()
的堆栈框架中。main()
中的,您将在main()
的堆栈框架中获得nPtr
的地址;在myFunc()
中,您得到的是nPtr
副本的地址,该副本通过值传递给myFunc()
作为Ptr
(因此您实际上得到的是Ptr
的地址,它是不同的),并且存在于myFunc()
的堆栈框架上。对于此函数
void myFunc(int *Ptr){
printf("&Ptr = %d\n", &Ptr);
};
调用该函数时,尽管您将指针(用于指向整数)传递到此函数,但系统正在创建指针的副本,当然它们将位于不同的内存地址
因此,当您返回main并检索原始指针地址时,它将显示此函数的原始地址
void myFunc(int *Ptr){
printf("&Ptr = %d\n", &Ptr);
};
调用该函数时,尽管您将指针(用于指向整数)传递到此函数,但系统正在创建指针的副本,当然它们将位于不同的内存地址
因此,当您返回main并检索原始指针地址时,它将显示回原始地址
nPtr
和Ptr
是独立函数中的独立变量,因此每个变量必须具有不同的地址,即&nPtr==&Ptr
始终为false
但是您询问了关于nPtr==Ptr
,即它们是否可以包含相同的值,作为指针,它们都可以包含相同的指针值。例如:
#include<stdio.h>
void myFunc(int *Ptr){
printf("Ptr = %p\n", (void *)Ptr);
};
int main(){
int x;
int *nPtr = &x;
printf("nPtr = %p\n", (void *)nPtr);
myFunc(nPtr);
printf("nPtr = %p\n", (void *)nPtr);
}
nPtr
和Ptr
是独立函数中的独立变量,因此每个变量必须具有不同的地址,即&nPtr==&Ptr
将始终为false
但是您询问了关于nPtr==Ptr
,即它们是否可以包含相同的值,作为指针,它们都可以包含相同的指针值。例如:
#include<stdio.h>
void myFunc(int *Ptr){
printf("Ptr = %p\n", (void *)Ptr);
};
int main(){
int x;
int *nPtr = &x;
printf("nPtr = %p\n", (void *)nPtr);
myFunc(nPtr);
printf("nPtr = %p\n", (void *)nPtr);
}
myFunc使用*Ptr,而main使用int*nPtr。在main中尝试int*Ptr。nptr是指向下一个节点的指针如何使nptr=Ptr?是否要使nptr==Ptr或使nptr==nptr?这是两件完全不同的事情。后者是不可能的,因为这是两个不同的变量,每个变量必须有自己的地址。前者已经存在,但您正在函数中打印
&Ptr
,而不是Ptr
。如果您打印了Ptr
,它将与nPtr
相同,但与您在main()
中打印的&nPtr
不同。您应该使用%p
格式说明符来打印F指针。并非所有指针都是int
s,有些更长。myFunc使用*Ptr,而main使用int*nPtr。在main中尝试int*Ptr。nptr是指向下一个节点的指针如何使nptr=Ptr?是否要使nptr==Ptr或使nptr==nptr?这是两件完全不同的事情。后者是不可能的,因为这是两个不同的变量,每个变量必须有自己的地址。前者已经存在,但您正在函数中打印&Ptr
,而不是Ptr
。如果您打印了Ptr
,它将与nPtr
相同,但与您在main()
中打印的&nPtr
不同。您应该使用%p
格式说明符来打印F指针。不是所有的指针都是int
s,有些更长。如何使nPtr=Ptr?如何使nPtr=Ptr?