说透指针
来源:互联网 发布:高帮鞋男士 知乎 编辑:程序博客网 时间: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;}
传递的是指针的地址的地址 要用指针的指针,函数调用的时候需要!
不是函数调用,直接赋值即可。
- 说透指针
- 说透指针
- 三言两语,妙说《指针》。
- 结构体指针说
- 三言两语说"指针"
- 关于指针,我想说
- 也说C语言指针
- 说透一级指针和二级指以及(void**)&在双链表中的应用
- 说透一级指针和二级指以及(void**)&在双链表中的应用
- 谁说C#中没有指针
- 谁说Java无指针, JAVA链表指针也好烦 - Java 指针回归
- 把Array说透
- 把触发器说透
- 把触发器说透
- 把触发器说透
- 把触发器说透
- 把游标说透
- 把触发器说透
- 今天在自己Blog上加上了Google广告
- COM 经验的八个教训(2):不要在线程之间传递原始接口指针
- COM 经验的八个教训(3):STA 线程需要消息循环
- 今天开始写自己的编程Blog
- COM 经验的八个教训(4):单元模型对象必须保护共享数据
- 说透指针
- 不基于NTFS权限的CVSNT权限设置
- COM 经验的八个教训(5):谨慎启动用户
- 比较清楚的介绍 外壳命名空间扩展 (转载)
- Web应用导出Excel报表的简单实现(HTML)
- DataGrid列操作
- COM 经验的八个教训(6):DCOM 不适于防火墙
- Linux编译内核的详细配置
- 嵌入式Linux入门的误区