指针--
来源:互联网 发布:淘宝国际版官方网站 编辑:程序博客网 时间:2024/05/20 18:47
说透指针
- 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;
- }
传递的是指针的地址的地址 要用指针的指针,函数调用的时候需要!
不是函数调用,直接赋值即可。
=================================================================
11.指针
指针只能指向地址!
指针的指针是为了取得“地址”,因为指针只是指向“主体”
int a;
int *b=&a;
int **c=&b;
a=1;
*b=2;
指针要对应级别,一级b对应一级&a,二级c对应二级&b。
如果传值原代码块无星
main()
{
swap(a,b,c)
}
swap(int a,int *b,int **c)
{
a=*b+**c;//这样不能改变值
*b=a+**c;//可以改变值
}
函数里要改变原值只有指针
printf("%d",*b);//输出2
printf("%d",a);//输出2
//指针和字符串
char * ch="abc";
char * cp=ch;
printf("%s",cp);//输出abc
//指针和字符
char ch=‘a’;
char * cp=&ch;
printf("%c",*cp);//输出a
=======================================================================
25.字符串
类型一:字符串
char day[15] = "abcdefghijklmn";//定义一
char day[] = "abcdefghijklmn";//定义一
char * str="abcdefghijklmn";//定义二
windows下VS2010调试窗口看区别
char str[20]="0123456789";//str是编译期大小已经固定的数组
int a=strlen(str); //a=10;//strlen()在运行起确定
int b=sizeof(str); //而b=20;//sizeof()在编译期确定
sizeof 运算符是用来求内存容量字节的大小的。而strlen是用来求字符串实际长度的。
下面2种声明完全一样
类型二:字符数组
char msg[]={'a','b','c'}
char msg[]={abc}
char *ans;
ans=strchr(day,'c');
printf("%s",ans);//输出从c开始的部分
printf("%d",*ans);//输出找到的指针
ans=strrchr(day,'c');
printf("%s",ans);//输出找到的指针
printf("%d",*ans);//输出找到的指针
char temp[100]="hello";
char *t="world";
strcat(temp,t);
输出 temp
要注意的是 第一个参数数组长度要=自身原长+合并字符长
类型三:字符串数组
char *a[4]={"this","is","a","test"};
char **p=a;
===========================================================================
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- VB.NET之旅(八)—接口
- VB.NET之旅(九)—接口继承
- sql server 2000/2005 script
- VB.NET之旅(十)—何时用接口
- 我的IT之路2011(一)
- 指针--
- vb.net之旅(十一)可视继承
- HTTP代理协议(HTTP CONNECT)
- Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
- 利用纯真IP库建立mysql ip数据库
- VB.NET之旅(十二)―事宜驱动
- HDU1401 Solitaire 双向搜索
- 用程序做301永久重定向的几种方法
- VB.NET之旅(十三)—标准事件处理程序