|
c语言指针学习 指针只有两层含义,1:指向地址,2:指针有类型,类型是其指向的内存空间数据的类型,表示从首地址开始取多少字节。
C语言相比于其他高级语言,不仅是运行速度快,而且还能够直接操作硬件,操作硬件就是依靠C语言指针这一强大功能实现的,学会C语言指针,就好像是武林高手打通了任督二脉,能大幅度提升编程能力。
地址是个什么东西:计算机存储的数据都有一个唯一的地址,32位系统就是8位16进制数表示的。比如0x12345678就是计算机的一个地址。一位十六进制代表四位二进制,0x12345678转换成二进制就是0001-0010-0011-0100-0101-0110-0111- 1000而每八位二进制占一个字节。
int *(*p(int))【3】 - p与()结合(考虑优先级) p是一个函数
- p(int) 函数有一个 整形变量
- *p(int) 函数返回值类型为指针
- *p(int)【3】 指针指向一个数组
- *(*p(int))【3】 数组里的元素都是指针
- int *(*p(int))【3】 指针指向的内容是int
从最简单的指针再来理解一下 int i=123 int *p=&i 上面的意思是p是int *类型的指针,指向i的地址,指针类型代表从首地址开始取多少个类型字节的数据。
int **ptr2 指向指针的指针,如果int*ptr1=&a,则*ptr1=a,*ptr2=ptr1,**ptr2=a。
下面的两个函数,只有指针操作的swap函数2才能实现两个数的交换,第一个代码的swap函数只是在自己的函数空间里操作!并没有影响到主函数! void swap(int a,int b) { int tmp; tmp=a; a=b; b=tmp; } int main (void) { int a=10; int b=20; printf("a=%d b=%d\n",a,b); swap(a,b); printf("a=%d b=%d\n",a,b); }
#include <stdio.h> void swap(int *,int *); void swap(int *p1,int *p2) { int tmp; tmp=*p1; *p1=*p2; *p2=tmp; } int main(void) { int a=10; int b=20; printf("a=%d b=%d\n",a,b); swap(&a,&b); printf("a=%d b=%d\n",a,b); } |