C语言中的指针概括
发布时间:2021-11-23 14:11:01 所属栏目:PHP教程 来源:互联网
导读:这两天复习了一下C语言中的指针,发现很多东西几乎全忘了,然后在CodeBlocks中打印一些小程序,进行知识的恢复,以后再忘了,就到自己的博客中来查看下,顺便给一些刚学习C语言的同学一个参考,有不对的地方还请大家来指正,有疑问的请给阿涛留言。 一:五个
这两天复习了一下C语言中的指针,发现很多东西几乎全忘了,然后在CodeBlocks中打印一些小程序,进行知识的恢复,以后再忘了,就到自己的博客中来查看下,顺便给一些刚学习C语言的同学一个参考,有不对的地方还请大家来指正,有疑问的请给阿涛留言。 一:五个重点概念 int *a; int **a; (1)指针的类型:指针本身自己的类型,如上两个指针,指针类型就是:int *, int ** 判断方法:将定义的标识符拿掉,剩下的就是指针的类型 (2)指针指向的类型:指针指向的空间存储的数据的类型,如上两个指针,指针所指向的类型是:int int* 判断方法:将定义的标识符和左边的第一个*号拿掉,剩下的就是指针所指向的类型,这个类型决定了编译器对 这个指向的内存空间中的数据作为什么类型进行处理。 (3)指针所指向的内存空间:由于指针的值就是地址,这个值就是所指向的内存空间的首地址,那么这个地址空间 有多大呢?然后就需要看你所指向的是什么类型了。比如: int a; char b; int *ptra=&a; char*ptrb=&b; 那么,ptra指向的空间大小就是一个int的大小,4个字节,ptrb指向的空间大小就是一个char类型的大小,一个 字节。 (4)指针的内存空间:指针也是一种数据类型,本身自然也有大小,但是不论什么样的指针,在32位下的系统中统 统都是4个字节。因为32位下的地址都是32位的。 (5)指针本身的地址:指针自己也有自己的地址,通过&取地址符也可以打印出来。 下面是我打印的一些小程序,大家可以copy下来挨个运行下,看看差异: #include <stdio.h> #include <stdlib.h> int fun(int num); int (*fun1)(int num);//指针函数 void swap(int *a,int *b); int main() { /*指针遍历数组 int a[5]={1,2,3,4,5}; int *aptr=b; for(i=0;i<5;i++) { printf("%dn",(*aptr)); (*aptr)++; aptr++; } for(i=0;i<5;i++) { aptr--; printf("after:%dn",(*aptr)); }*/ /*指针遍历char类型数组 char b[5]={'a','b','c','d','e'}; int *ptr=b; ptr++; printf("%cn",(*ptr)); */ /*32位下所有指针都是4个字节 char *a; printf("%d",sizeof(a)); */ /*将地址赋给指针,&是取地址符,&也可以将指针的地址取出来 int a=10; int *ptr=&a; printf("%dn",&a); printf("%dn",&(*ptr)); printf("%dn",ptr); printf("%dn",&ptr); */ /*双指针 int a=10; int **ptr; *ptr=&a; **ptr=20; printf("%dn",**ptr); */ /*int 变量刚声明就赋给了空间,但是刚开始是个乱值。 int a=0; printf("%dn",sizeof(a)); printf("%dn",&a); */ /*数组名可以当做指针 int a[5]={1,2,3,4,5}; printf("%dn",*(a+2)); */ /*指针和结构体.结构体内的变量不能赋值,结构体可以定义在任何地方, 但是后面必须有分号 struct str { int a; int b; int c; }; struct str s; s.a=100; struct str*ptr=&s; printf("%dn",ptr->a); */ /*指针函数 fun1=fun; int a=fun1(5); // int a=(*fun1)(5);经过测试也可以 printf("%dn",a); */ /*指针自己的地址是不会改变的 int a[3]={1,2,3}; int *ptr=a; printf("%dn",ptr); printf("%dn",&ptr); ptr++; printf("after:%dn",ptr);//指针指向的地址,增加了4 printf("after:%dn",&ptr);//指针的地址,没有改变 */ /*指针转换 float a=13.8; //int*pa=&a;不经转换,打印出来是错误的 //int *pa=(int*)&a;//经过转换也是不行的,指针是不能相互转换的 printf("%dn",a);//应当是%f,不然还是乱的数据 */ int a=100; int b=200; int *pa=&a; int *pb=&b; swap(pa,pb); printf("%d %dn",*pa,*pb); return 0; } int fun(int num) { return num; } void swap(int *a,int *b) { int temp=*a; *a=*b; *b=temp; } (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |