4-C语言指针 2020/11/17
1.什么是指针
指针变量和整形,字符型变量一样,都是存放相应数值的量,指针存放的是地址,并且取地址的内容时,有*这个符号。
例如:int *a,b; a=&b; *a=5;(注:指针必须先指向一个明确地址,才能在那个地址上写入内容)
2.指针做函数参数
在mian 外定义一个函数,想要改变,传输来的指时,应用,指针传地址,正常的值传递在函数中改变后就释放了,而地址传递是在那个数值的原地址上修改。
3避免空指针和野指针
int *a=NULL;为空指针,地址为0,不可填写内容
int a.未定义的指针为野指针,其指向的地址为垃圾值。若其后加上a=10;则程序崩溃。
一般使用指针的步骤:
定义指针;初始化指针;使用指针;
初始化方法:1.初始化为已知变量的地址:i nt a;int *b;b=&a;
2.malloc动态申请:#include<stdlib.h>
char *a=(char *)malloc((sizeof(cahr))*128);128可自己填写
最后要释放内存free(a);
4.指针和数组可互相转换
因为数组名就是数组首元素的地址;int a[5]={0};int *b;b=a;
char a[]=“hello”;可修改数组的值;char *a="hello ";不可修改,存放在只读数据区。
5.函数指针
指向函数的指针。
int func(int a,int b)
{
return a+b;
}
int main()
{
int (*fc)(int,int);
fc=func; //func后不加(),加了表示函数的值;
fc(5,2);
}
6.指针和数组2
1.指针数组:是一个数组,他的每个元素都是指针。如int *p[3]
2.数组指针:他是一个指针。指向一个数组。如int a[3][4]; int (*p)[4]=a;
7.二级指针,指针的指针
int *a; int **p=&a;p指向指针a的地址。
8.命令行参数
所谓命令行参数,指在linux中输入命令时可直接后缀参数。
main(int argc,char *argv[]) argc为参数个数;argv为字符串指针数组,各元素为命令行的各字符串。