c语言指针

279 阅读3分钟

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」。

定义指针:

int* p1; int ** p2; int *p3;都是合法的定义指针变量的语句。

 

1.*p表示指针变量p的值;在C选项中&p表示指针变量p的地址;

           

2.所有类型的指针变量所占内存的大小是一样的;指针变量指向同类型的变量;

 

3,通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量;

 

两个指针变量之间不能进行不可以加乘除。

 

有以下函数

char   *fun(char *p)

{return  p;}

该函数的返回值是______。

 

    p本身就是一个字符型指针变量,返回p也就是返回变量p中存放的地址值。

*q=0;  给地址q赋值 

 q =&a  给地址q 赋a的地址

int *p[3];,:定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针。

指向指针的指针

*c表示c间接指向的对象的地址,而**c是c间接指向的对象的值。

例如:

main()

{ int a=5,*b,**c;

  c=&b; b=&a;

  ……

}

程序在执行了c=&b;b=&a;语句后,表达式:**c的值是______。

解释:而在c=&b中,已经把b的地址存放在c里了,*c就指向了b的地址,b里存放的就是a的地址,那么**c应该是变量a的值了。

Int  *sum ;

Sum  是个指针变量  ,  

注意:

指针变量中只能存放地址(指针),不要将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量。

    有两个相关的运算符:

(1)&:取地址运算符。

(2)*:指针运算符(或称"间接访问"运算符)。

指针的运算:

int a[]={10,20,30},*p=&a;当执行p++;后,

    题目中p=&a表示指针p指向第一个元素a[0],执行p++是指使p指向下一个数据对象的地址,也就是向高地址移了一个存储单元

末地址减去首地址等于指针长度:

int  fun(char  *s)

 { char  *t=s;  //将字符指针s的首地址赋予字符指针t

   while(*t++);

       return(t-s);

 }

指针:

指针变量指向整型变量、字符串、数组,也可以指向一个函数

Int   *f ;  int  *f []  ;  int (*f)();

int (*f)(int)定义f是一个指向函数的指针变量,此函数带回整型的返回值,同时该函数还具有一个整型的形参。

给指向函数的指针赋值:

函数指针的定义形式是:数据类型标识符 (*指针变量名)();,void (*pf)()定义了一个没有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数,所以给pf赋值时,只把函数名fun赋给pf即可

 

给指针赋值: 

Int  *p =&n;

P = null;

给指针变量赋值

*p = null;

因为NULL的代码值为0,所以,语句"p=NULL;"等价于:"p='\0';"或"p=0;"。

 

指针的移动:

指针p一开始指向的是数组x的首地址。p+1表示指针p指向存储单元x[1];在对指针进行加、减运算时,数字1代表1个存储单元长度 。

 

指针的基类型决定该指针访问的每个内存单元包含多少字节.