c语言指针学习
指针只有两层含义, 1:指向地址, 2:指针有类型,类型是其指向的内存空间数据的类型,表示从首地址开始取多少字节。
C语言相比于其他高级语言,不仅是运行速度快,而且还能够直接操作硬件,操作硬件就是依靠C语言指针这一强大功能实现的,学会C语言指针,能大幅度提升编程能力。
再讲一下地址是个什么东西:计算机存储的数据都有一个唯一的地址,32位系统就是8位16进制数表示的。比如0x12345678就是计算机的一个地址。一位十六进制代表四位二进制,0x12345678转换成二进制就是0001-0010-0011-0100-0101-0110-0111- 1000而每八位二进制占一个字节。
int *(*p(int))【3】
1.p与()结合(考虑优先级) p是一个函数
2.p(int) 函数有一个 整形变量
3.*p(int) 函数返回值类型为指针
4.p(int)【3】 指针指向一个数组
5.(*p(int))【3】 数组里的元素都是指针
6.int *(*p(int))【3】 指针指向的内容是int
从最简单的指针再来理解一下
int i=123
int *p=&i
上面的意思是 p是 int *类型的指针,指向 i的地址,指针类型代表从首地址开始取多少个类型字节的数据。
下面的两个函数,只有指针操作的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);
}