资源描述:
《C语言基础自学总结之四指针.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言基础自学总结之四:指针指针是一个变量一指针变量、类型例子1:指针类型#includeintmain(void){inta;int*p=&a;//&取地址符,初始化表达式的意思,指针p的值为,取a的地址,printf("%ld%ld%ld",sizeof(p),sizeof(int*),sizeof(*p));//指针变量p,类型是int*,在64位系统下,所有的指针都是8字节,指针是一个变量8字节的变量,*p是int类型,为4字节。int*类型就是指针类型或者是地址类型,地址是常量,指针是变量,&a就
2、是地址类型的常量,也就是int*类型,所以可以符值给int*类型的变量*p,每一空间都有一个地址,常量是每有空间也就是没有地址的如&6.说白了就是,取内存中每一块的地址(门牌号),就是地址类型。&a,a指的是a这个地址(门牌号)。return0;}例子2:指针初始化#includeintmain(void){inta=2;int*p=&a;//p指向a*p=8;//意思是,找到地址为a位置,从这个位置开始取,取*p个字节,得到的就是a,*p是声明的int类型,所以是4个字节。所以*p=8就相当于a=8.printf
3、("%d%d",*p,a);return0;}二、指针与数组例子1:#includeintmain(void){inta[10]={};int*p=a;//单独的数组名a相当于其第一个元素的地址,即a=&a[0]//数组名是数组的首元素地址,//上面的意思是,将a[0]的地址赋给*p,p指向a[0]的地址printf("%d",a[0]);*p=8;printf("%d",a[0]);return0;}例子2:#includeintmain(void){inta[10]={};in
4、t*p=a;inti;for(i=0;i<10;i++){//for:一种循环语句for(;;)里面是3个语句,两个分号。第一个语句是开始前执行,第二个语句是判断真假,如果真,就执行后面(大括号内)的代码。第三个语句是每次执行完毕后执行的东西,通常第三个语句使用"i++"表示i=i+1的意思,用来递增自变量i。scanf("%d",p+i);//p+i就数组每个元素的地址}for(i=0;i<10;i++){printf("%d",*(p+i));//*(P+1),就是每一个数组的元素。}p[3]=9;//p[3]就是*(p+3
5、),[]运算赋,*(&a[0]+3)=*(a+3)=*(p+3)=p[3],也是一样a[3]=3[a]=*(a+3)=*(3+a)return0;}三、指针变量计算指针变量加1,其结果相当于加1个其指向的字节数。例子1:int*p=(int*)5;p++;p==9,#includeintmain(void){int*p=(int*)5;//强制把一个常量数值变成一个int*类型。char*q=(char*)5;printf("%p",p+1);printf("%p",q+1);//打印地址用%p,打印所有的
6、地址都数%p,//p,q是指针变量,是int*类型,+1就是,加上指向类型地址的字节数,这里指向的地址数int,char类型,为4/1个字节。return0;}四、const关键字const:声明只读变量意思:它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助例子1:*前const#includeintmain(void){charb='B';chara='A';constchar*p=&a;//
7、星前const,const在*之前//charconst*q=&a;//星前const,表示const修饰*p,p/q可以改变,但是*p不可以改变char*q=&b;a='C';//*p是不可改变的,a是可以改变的,不能写成*p=‘c’,只能通过变a来改变*p,不能通过*p来改变a,也就是不能给*p赋值来改变a*q='D';//没有const的就能直接改变*q,直接给*q赋值。printf("%c%c",*q,*p);//%c输出字符。只能通过变b来改变*p,不能通过*p来改变breturn0;}例子2:*后const#in
8、cludeintmain(void){chara='W';charb;char*constp=&a;//const在*之后,*p能改变,p不能变*p='W';p=&b;//这样是错误的,不能运行,return0;}