#include <stdio.h>
/*
指针
1,什么是指针 作用
如果在函数之间传递大于一个的数据给调用者
指针是一个变量 只能存储地址 占8个字节
2,指针的类型
int float char
指针只能指向同种类型的数据
一级指针:指向一个普通变量
二级指针:指向一个地址
int a=20;
int *pa=&a;
int * *pb=&pa; //int *是指针的类型
int ** *pc=&pb; //int **是类型
int *** *pd=&pc; //int ***是类型
3,指针的值
4,指针指向的区域
5,指针的运算
6,指针和数组
7,指针和函数
*/
int test(int a,int s){
return a+1;
}
int test2(int a,int s){
a++;
s++;
return a;//只能返回一个值
}
/*int main(){
int b=1;
int *d=b,*e=c;
int c=2;
swap(d,e);
printf("%d",b);
return 0;
}*/
void swap(int *a,int *b){
int *temp=*a;
*a=*b;
*b=*temp;
}
int main(){
int a=20;
int b=30;
int const *pa=&a;//常量指针 不能*pa=50;
int * const pa=&a;//指针常量 不能pa=&b;
int const * const pa=&a;//指向常量的常量指针
printf("%d",*pa);
}
深入了解
#include <stdio.h>
int main(){
int num[]={1,2,3,4,5,6,7,8,9};
printf("%p\n",num);
printf("%p\n",num+1);
printf("%d\n",sizeof(num));//计算整个数组的内存空间
//num++;//错误,不能对数组首地址改变,数组类似与指针常量
int * a;
a=num;
*(a++)=20;
printf("%d\n",num[0]);
printf("%p\n",(a++));
printf("%p\n",a);
int ab[5]={1,2,3,4,5};
int *ptr=(int*)(&ab+1);//&ab+1表示取下一个数组的地址
printf("%d %d\n",*(ab+1),*(ptr-1));
printf("%#x\n",num);//地址的一种格式 前面加了0x
printf("%p\n",num); //地址普通格式
return 0;
}