C语言基础自学总结之四指针
C语言基础自学总结之四:指针指针是一个变量一 指针变量、类型例子1:指针类型#include <stdio.h>int main(void) int a; int *p=&a; /&取地址符,初始化表达式的意思,指针p的值为,取a的地址, printf("%ld %ldn %ldn",sizeof(p),sizeof(int *),sizeof(*p); /指针变量p,类型是int ,在64位系统下,所有的指针都是8字节,指针是一个变量8字节的变量,*p是int类型,为4字节。int*类型就是指针类型或者是地址类型,地址是常量,指针是变量,&a就是地址类型的常量,也就是int类型,所以可以符值给int类型的变量p,每一空间都有一个地址,常量是每有空间也就是没有地址的如&6.说白了就是,取内存中每一块的地址(门牌号),就是地址类型。&a,a指的是a这个地址(门牌号)。 return 0;例子2:指针初始化#include <stdio.h>int main(void) int a=2; int *p=&a; /p指向a *p=8; /意思是,找到地址为a位置,从这个位置开始取,取p个字节,得到的就是a,p是声明的int类型,所以是4个字节。所以p8就相当于a8. printf("%dn %dn",*p,a); return 0; 二、指针与数组例子1: #include <stdio.h>int main(void) int a10=; int*p=a; /单独的数组名a相当于其第一个元素的地址,即a&a0 /数组名是数组的首元素地址,/上面的意思是,将a0的地址赋给p,p指向a0的地址 printf("%dn",a0); *p=8; printf("%dn",a0); return 0;例子2: #include <stdio.h>int main(void) int a10=; int *p=a; int i; 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("%dn",*(p+i);/*(P+1),就是每一个数组的元素。 p3=9;/p3就是(p3),运算赋,(&a03)*(a3)(p3)p3,也是一样a33a(a3)(3+a) return 0;三、指针变量计算指针变量加1,其结果相当于加1个其指向的字节数。例子1: int*p=(int*)5; p+; p=9,#include <stdio.h>int main(void) int *p=(int*)5;/强制把一个常量数值变成一个int类型。 char *q=(char*)5; printf("%pn",p+1); printf("%pn",q+1);/打印地址用p,打印所有的地址都数p, /p,q是指针变量,是int类型,1就是,加上指向类型地址的字节数,这里指向的地址数int,char类型,为41个字节。 return 0;四、const关键字const :声明只读变量意思:它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助例子1:*前const#include <stdio.h>int main(void) char b='B' char a='A' const char *p=&a; /星前const,const在*之前 /char const *q=&a; /星前const,表示const修饰p,pq可以改变,但是p不可以改变 char *q=&b; a='C'/*p是不可改变的,a是可以改变的,不能写成pc,只能通过变a来改变p,不能通过p来改变a,也就是不能给p赋值来改变a *q='D' /没有const的就能直接改变*q,直接给q赋值。 printf("%cn %cn",*q,*p);/c输出字符。只能通过变b来改变p,不能通过p来改变b return 0;例子2:*后const#include <stdio.h>int main(void) char a='W' char b; char *const p=&a; /const在之后,p能改变,p不能变 *p='W' p=&b;/这样是错误的,不能运行, return 0;