|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
对于字符串类型的指针
*myp1=p1;*myp2=p2;和myp1=&p1;myp2=&p2;有什么区别
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int Testbin( char** myp1,int *mylen1, char **myp2, int *mylen2 ){
char *p1=(char *)malloc(100);
char *p2 =(char *)malloc(200);
*myp1 = p1;
*myp2 = p2;
//myp1 = &p1;
//myp2 = &p2;
strcpy(p1, "hello my best friend");
strcpy(p2, "hi how is it going");
*mylen1 = strlen(p1);
*mylen2 = strlen(p2);
return 0;
}
int main(){
char *p1 = NULL;
char *p2 = NULL;
int len1;
int len2;
Testbin(&p1, &len1, &p2, &len2);
printf("len1:%d\n", len1);
printf("len2:%d\n", len2);
printf("p1:%s\n", p1);
printf("p2:%s\n", p2);
return 0;
}
运行结果
当是:*myp1 = p1;*myp2 = p2;时
len1:20
len2:18
p1:hello my best friend
p2:hi how is it going
请按任意键继续. . .
当是:myp1 = &p1;myp2 = &p2;时
len1:20
len2:18
p1:(null)
p2:(null)
请按任意键继续. . .
请问为什么,求大神解惑
先回答下第1个问题:
myp1,myp2 两个是指向指针的指针,就是myp1,myp2中是一个内存地址,而这个内存中存储的内容是一个指针即是另一个内存的地址,当myp1=&p1;myp2=&p2;的时候,myp1和myp2存储的就是p1,p2的地址,而p1,p2中存储的是char类型的地址,初始化为NULL。
在函数中分配了两块内存p1,p2 ,*myp1 = p1;*myp2 = p2;即是将主函数中的p1,p2指针指向这两亏新分配的内存,因为*myp1 ==p1(主函数中的),实际就改变了主函数的p1,p2指针的内容,由于这块内存在函数使用后还在主函数中使用到,所以没有被释放掉,那么主函数的p1,p2实际有内容了,所以在主函数中输出就有值
而如果你使用myp1 = &p1;的话就是myp1指针指向的是函数内p1,存储的是函数内p1指针的地址,当你使用这个的时候,到了函数结束的时候就会释放掉,而主函数中的p1,p2还是指向NULL,所以p1,p2输出就是空的
而len1,len2在函数中修改了本身的值,所以在主函数输出都会有具体的值
指针就像门牌号一样,你调用函数的时候,如果使用的是函数内的指针,就像你填表的时候随便填一个门牌号一样,过后你家的门牌号还是不变,而当你的指针指向的是主函数时,相当于直接修改你家的门牌号,那么你家的门牌号就会改变
|
|