朋友们,相信很多人对c语言指针用法教程和c语言全面解析指针十个知识点整理都不是特别了解,因此今天我来为大家分享一些关于c语言指针用法教程和c语言全面解析指针十个知识点整理的知识,希望能够帮助大家解决这些问题。
本文目录一览
c语言指针用法教程
指针在C语言中有很大的作用,对于处理数组和字符起到了决定性作用,对于初学者来说,学习指针有一定难度,功夫不负有心人。下面就让我们看一看指针的内容吧。
c语言指针用法
变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。
为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”,例如,
a代表指针变量,而*a是a所指向的变量,因此,下面两个语句作用相同:
i=3;
a=&i;
*a=3;
第二个语句的含义是将3赋给指针变量a所指向的变量。
指针变量的引用,指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的。
为什么要使用指针
1)指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;
2)C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;
3)C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对象,但是这种操作可以由指针来完成,而且并不违背传值调用。
c语言全面解析指针,十个知识点整理
C语言10个小知识了解指针
1.若有代码,int a=10,*p;p是指针:也是一个变量,且是一个只能用来存放地址的变量。
2.若有代码,int a=10,*p;p=&a;当执行了上面的代码,会说“p指向了a”,其实就是“p指针变量存放了a的地址”。
3.两个*的区别,有如下代码:inta=10,*p;//该处的* 说明p是一个指针变量用来存放地址p=&a;*p=*p+1;//该处的* 表示p所指的变量中的值即a的值10。
总结: 变量定义时的* 说明该变量是一个指针,调用语句中的*表示指针指向的变量中的值。[此处是比较容易混淆的]。
4.int a=10,*p;p=&a;则:*p=*p+1;//等价:*p +=1;(0)++++(*p);表示的内容相同,都是p所指变量的值+1。
5. *p++和(*p)++的区别是: 等价于* (p++),先获取 p当前所指元素的值,然后p指针+1(p指针向后移动一个单元,一般用在数组中,普通变量会越界);后者仅仅是p所指变量的值+1。
6.定义变量时,一个*说明该变量是指针,两个*说明该变量是指向指针的指针(存放的是指针变量的地址)。int a=10,*p,**q;p=&a;//p指向a,*p的结果是10,q=&p;//q 指向p,* q的结果是p的地址值,**G的结果才是10。
7.如果调用函数传递的是地址,那么被调函数中形参就需要使用指针接收,在函数中对指针所指变量值的改变,会影响到调用函数中的变量值。
8.一维数组名和指针的区别,有定义:int a[10],*p;
p=a;//合法,因为,一维数组名存的是数组首地址,这样使 p指向了a首地址,也就是第一个元素的地址。
a++; / /不合法,因为a是一个地址常量,开辟了就不能再修改了,一切给数组名字赋值的操作都是非法的。
p++://合法,因为p是一个指针,p++表示从当前向后移动了一个位置。
对于上面的定义,a[i] 、* (ati)、* (p+i)、p[] 都是合法,都是取下标为i的元素值。所以: p++; 是使指针向后移动,(*p) 十+是当前所指变量的值内容+1。
9.若有定义:int a[3][22],*p[3],iJ;*p[3] 中[优先级[高于*,说明p是一个数组名,前面的*说明该数组中每个元素都用来存放指针,这叫指针数组。如果p和a产生联系,则只能通过逐个赋值的方式完成,即: for(i=0;i<3;i++)p[] =a[; //合法,因为a[] 是二维数组中每行的首地址,所以可以存放到p数组中。
但是 p=a;是非法的,因为a是地址,p是数组的名字,并不是指针名下面获取数组元素的方式都是合法的:*(p[i]+j)*(*(p+i)+j) (*(p+i))[j]。
10.若自定义函数的实参是一维数组名,则该函数的首部可以写成: fun(int al) fun (int a[M]) fun(int*a) M表示长度,若有自定义函数的实参是二维数组名,则该函数的首部可以写成: fun(int (*a)[N])。
fun(int al[N]) fun(int a[M][NJ) M表示行数,N表示列数,若有指针数组作为fun函数的实参,则该函数的首部可以写成:fun(int *a[M]) fun(int *al) fun(int**a)。
总结:以上就是本站针对你的问题搜集整理的答案,希望对你有所帮助。