我注意到,当指针地址传递给函数时,指针地址是不同的。是否确定
访问函数中存在的值?请不要建议从函数中返回指针
值。我严格希望使用void函数
输出:
&nPtr=6422300
&Ptr=6422272
&nPtr=66422300
请参阅以下代码:
#include<stdio.h>
void myFunc(int *Ptr){
printf("&Ptr = %dn", &Ptr);
};
void main(){
int *nPtr;
printf("&nPtr = %dn", &nPtr);
myFunc(nPtr);
printf("&nPtr = %dn", &nPtr);
}
让我更清楚一点。这是我试图修复的代码。我只想让两个指针指向同一个地址。我想
使用最佳编码实践
#include<stdlib.h>
#include<stdio.h>
void myFunc(int *Ptr){
Ptr = malloc(10*sizeof(int));
printf("*Ptr = %dn", *Ptr);
};
void main(){
int *nPtr;
printf("*nPtr = %dn", *nPtr);
myFunc(nPtr);
printf("*nPtr = %dn", *nPtr);
}
在main()
中,您将在main()
的堆栈帧中获得nPtr
的地址;在myFunc()
中,您得到的是nPtr
的副本的地址,该副本通过值传递给myFunc()
作为Ptr
(因此您实际上得到的是不同的Ptr
的地址(,并且存在于myFunc()
的堆栈帧上。
nPtr
和Ptr
是独立函数中的独立变量,因此每个变量必须具有不同的地址,即&nPtr == &Ptr
将始终为false。
但您询问了nPtr == Ptr
,即它们是否可以包含相同的值,并且作为指针,它们都可以包含相同指针值。例如:
#include<stdio.h>
void myFunc(int *Ptr){
printf("Ptr = %pn", (void *)Ptr);
};
int main(){
int x;
int *nPtr = &x;
printf("nPtr = %pn", (void *)nPtr);
myFunc(nPtr);
printf("nPtr = %pn", (void *)nPtr);
}
输出:
nPtr = 0x7ffe9a615104
Ptr = 0x7ffe9a615104
nPtr = 0x7ffe9a615104
对于此函数
void myFunc(int *Ptr){
printf("&Ptr = %dn", &Ptr);
};
当您调用它时,尽管您将一个指针(用于指向整数(传递给该函数,但系统正在创建指针的副本,当然它们将位于不同的内存地址。
因此,当您返回到主目录并检索您的原始指针地址时,它将显示回原始地址