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);
}