说透指针

来源:互联网 发布:高帮鞋男士 知乎 编辑:程序博客网 时间:2024/04/30 20:39
int a=1;int * b=&a;int **c=&b;printf("&a:%d\n",&a);printf("b:%d\n",b);printf("&b:%d\n",&b);printf("*b:%d\n",*b);printf("**c:%d\n",**c);printf("*c:%d\n",*c);printf("c:%d\n",c);printf("&c:%d\n",&c);


运行结果:

在windows下用VS2010开调试:


&a=b=*c=是地址

a=*b=**c=1是数值

&b=c是地址

&c是地址

 声明的时候不可以两头有*

 

一级指针b对应一级指针&a

二级指针c对应二级指针&b

指针要对应级别!

 

再看字符串

char * a="abc";char *b=a;printf("a:%s\n",a);printf("b:%s\n",b);


输出:

a:abc

b:abc

 

再看一段程序 理解地址

char * p="a";char * p1=p;int a=1;int *b=&a;printf("p : %s\n",p);printf("*p: %d\n",*p);printf("&p: %d\n",&p);printf("&p[0]: %d\n",&p[0]);printf("p1 : %s\n",p1);printf("*p1: %d\n",*p1);printf("&p1: %d\n",&p1);printf("&p1[0]: %d\n",&p1[0]);printf("*b: %d\n",*b);printf("b : %d\n",b);printf("&a: %d\n",&a);printf("&b: %d\n",&b);


注意:指针指向字符串指针时不带*,而指针指向数值指针时一律&地址

 

char * menu[]={

"abc",

"def",

"mnp",

NULL,

};

main()

{

char ** opt;

opt=menu;

printf("%d\n",opt);

printf("%s\n",*opt);

}

 

输出:

134518260
abc

 

指针的指针作用

 

只使用指针

swap (int *a,int *b){int c=0;c=*a;*a=*b;*b=c;}int main(){int  a=1;int  c=2;int  *b=&c;swap(&a,b);        printf("a:%d\n",a);        printf("b:%d\n",*b);        return 0;}


使用指针的指针

swap (int *a,int **b){int c=0;c=*a;*a=**b;**b=c;}int main(){int  a=1;int  c=2;int  *b=&c;swap(&a,&b);        printf("a:%d\n",a);        printf("b:%d\n",*b);        return 0;}


 传递的是指针的地址的地址 要用指针的指针,函数调用的时候需要!

不是函数调用,直接赋值即可。

原创粉丝点击