指针概念知识点总结经典由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“指针知识点总结”。
指针概念知识点
● 变量的地址就是变量的指针。变量的值和变量的地址是不同的概念,变量的值是该变量在内存单元中的数据。用来存放指针(地址)的变量就称为指针变量。
● 若把某变量的地址赋值给指针变量p,则称指针变量p指向该变量。
● 定义指针变量的一般形式为:类型名*指针变量名;,其中“*”为说明符,而不是运算符。
● 通常指针变量可以通过以下几种方法获得地址:通过地址运算“&”赋值,指针变量的初始化,通过其他指针变量赋值,用NULL给指针变量赋空值,以及通过调用标准函数赋值。
● “*”称为指针运算符(单目运算符),也称取内容运算符。当指针变量p指向一个变量x时,可以用*p的形式存取该变量的值。此时,*p与变量x相互等价。
● 取地址运算符“&”与指针运算符“*”作用在一起时,有相互“抵消”的作用。对于变量x,*&x与x相互等价。
● 若定义了一维数组a和指针变量p,且p=a;,则以下四种表示相互等价:a[i]、p[i]、*(a+i)、*(p+i)。
● 未对指针变量p赋值即p没有指向时,而就对*p赋值,该值就代替了内存中某单元的内容,有可能出现不可意料的错误。
● 一个数组的元素在内存中是连续存放的,数组第一个元素的地址称数组的首地址。在C语言中,数组名是该数组的首地址,因此,数组名是指针常量。
● 当指针变量p指向数组元素时,p加上一个正整数n,则当前指向为相对p向前移动n个元素的位置;p减去一个正整数n,则当前指向为相对p向后移动n个元素的位置。
● 假设指针变量p、q指向同一数组,若p指向地址较大元素,q指向地址较小的元素,则p>q的值为1(真),且p
● 假设指针变量p、q指向同一数组,p-q的值等于p所指对象与q所指对象之间的元素个数,若p>q则取正值,p
● 把字符串常量赋值给字符指针变量,相当于把该字符串常量的首地址赋值给字符指针变量。
● C语言的二维数组由若干个一维数组构成。若有定义语句:int a[M][N], i, j;,则以下元素的七种表示相互等价:a[i][j]、*(a[i]+j)、*(*(a+i)+j)、(*(a+i))[j]、*(&a[0][0]+N*i+j)、*(a[0]+N*i+j)、*(*a+N*i+j)。
● 若有语句:int a[M][N], i, j,(*pi)[N];,则指针变量pi指向“包含N个整型元素的一维数组”。当pi=a;时,pi+1将跳过N个元素指向下一行,故称pi为行指针,也称pi是(指向一维)数组(的)指针。若pi=a;,则以下五种元素的表示相互等价:a[i][j]、pi[i][j]、*(pi[i]+j)、*(*(pi+i)+j)、(*(pi+i))[j]。
● 除了由二维字符数组可以构成字符串数组外,还可以定义一个指针数组,并在定义时用字符串赋初值的方法,构成一个字符串数组。
● 指向指针的指针变量,经过二次间接存取后才能存取到变量的值。
● 通常用指针数组的每个元素pa[i]指向二维数组a的每行第0列元素的首地址,然后用指向指针的指针变量pp指向指针数组,此时,pp+1指向数组指针pa的下一个元素,也就是 pp+1指向二维数组a的下一行。如果a是二维字符数组,则pp+1指向下一个字符串。
● 当指针变量指向某一结构体变量时,可用下述三种方式之一存取结构体成员(三种方式是等价的):结构体变量名.成员名、指针变量名->成员名、(*指针变量名).成员名。
●若p指向数组a,则:⑴ p++(或p+=1),使p指向下一元素。⑵ *p++等价 *(p++)。作用是先得到p指向的变量的值(即*p),然后再使p+1→p。⑶ *(p++)与*(++p)不同。前者为a[0],后者为a[1]。⑷(*p)++表示p指向的元素值加1,即(a[0])++⑸ 如果p当前指向a数组中第i个元素,则: *(p--)相当于a[i--],先对p进行*运算,再使p自减; *(++p)相当于a[++i],先使p自加,再作*运算。*(--p)相当于a[--i],先使p自减,再作*运算。