关于C语言指针和指针运算符和取地址运算符的相关总结

关于C语言指针和指针运算符和取地址运算符的相关总结

每个变量占据着一定的内存,而内存占据着一定的字节。其变量的定义是在系统内部给想要定义的变量分配一定的内存(也可以说是一定的字节),其定义的变量名在一定程度上可以与其对应的存储内容划上等号。而指针就是在这个变量名的基础上,又开辟了另外一个空间,指向了这个和存储内容几乎相似的变量名。

就相当于一开始我可以直接地走入自己的房子。在加入指针之后,情况转变为,我需要先找到自己二点门牌号才可以进入自己的房子。

其定义形式:对应存储数据的类型 *标识符

 

关于取地址运算符&,它通常与对应的变量名相联系,想普通常见的基础类型的变量,如int ,char等等,&与其对应的变量名形成

&变量名   左边这种形式,表明现在将对应的存储内容的地址提取,并准备赋值给指针类型的变量。这种形式不仅仅出现在关于指针的赋值,在scanf语句对变量的赋值上也有出现,其形式依然没变,还是&加上一个变量名。其过程均可以如此想象,将变量名看作近似于存储内容,即如一个存储内容的代名词,看到变量名如见到存储内容,&取地址运算符,也如其名,我们将其工作过程抽象为将存储内容的地址抽取出来,并准备作下一步的工作。

 

关于指针运算符*,定义形式:*指针名 。指针运算符通常加在指针的旁边,(指针即指向变量名的变量),我们可以将其的工作原理抽象为,将指针运算符的右边的指针所指向的变量名的存储内容,抽离出来并作下一步的工作。其形式在指针的定义就有出现,我们这时可以将其理解为,现在定义了一个不指向任何变量名(即对应的存储内容)的指针,此时的指针是不指向任何东西的,若在后续对其进行初始化,也必须使用取地址运算符,将其变量名或者说某变量(归根到底是指存储内容)所对应的地址抽离出来并赋值给指针。

 

关于指针与一维数组的相关总结:

首先阐述一下一位数组的工作流程:一维数组存储的是每个元素。每个元素都被分配着自己的内存,每个内存都分配着自己的唯一的地址,

关于数组的遍历,也是通过其对每个数组内部的各个元素的各个地址进行地多次地访问,最终达到遍历的效果。

指针作为连接存储内容的桥梁,我们自然可以通过指针,并通过指针所指向的存储内容对数组内部的各个元素进行访问。虽然看起来好像有点麻烦,但是实际上其访问速度是大于利用下标对数组的访问的。

每个数组元素的变量名为a[i](假设其数值名为a),其对应的变量名为a,它代表的是首元素的地址,即a[0]的地址,同理a[1]就代表的是其数组中第二个元素的地址。。。。。。。

关于指针对数组的访问,其依然与上面的取地址运算符和指针运算符息息相关,首先要先将数组的首元素的地址利用取地址运算符&a[0]将其抽离出来(当然也可以直接使用其数组名,对其进行赋值即

指针=数组名,因为其代表的是其数组首元素的地址,而&a[0]而是我们上述的形式,左边是取地址运算符,右边是变量名所相似的存储内容,&a[0]将其元素的地址抽离出来,并赋值给了指针)。

以此为基础a+1,a+2,a+3.....a+i。其代表的是第二个数组的元素至第i-1数组元素的地址,若想要访问器对应的存储内容,还需要使用指针运算符,即*变量地址,左边的形式,借此进行访问。a代表的是数组的首元素的地址是不能改变的,所以a++这种试图改变数组首元素地址常量的做法是错误的。

但是若一开始我们就将数组首部元素地址赋值给一个指针,我们对指针进行增减是ok的,因为它是一个变量,而a,它是一个常量。

同时,在函数内部,我们也可以将函数形参括号内的数据类型设置为指针类型 (例子:int  kk(char  * str,int  * a){})。当然作为函数的参数传入也是可以为指针类型(例子:kk(p1,p2)p1,p2为对应的指针类型)。

 

字符型指针是可以存储字符串的,即可以对字符串进行整体整部分的存取,(使用“%s”,对其进行格式声明),并通过器指针变量名直接对其内容进行打印,这一点和字符型数组类似,字符型数组同样使用%s的格式声明符和数组的变量名(即数组名),对其数组内部的整体内容进行输出。

同样还是他们的共同点,若使用指针形式,或普通数组形式定义非字符型数组,其访问就不能像上述一般,进行整体的输出,只能一个一个地访问。

字符型数组关于数组元素的访问,是通过其对应存储内容地址的不断变化,达到对数组内部的不同元素的访问。

而字符型指针关于其对字符的访问,却像是一次性的,从其给定开头,直接访问到字符串的尾部。如我们定义了一个字符串

char a*=“abcdefg”,若printf(“%s”,a)我们此时打印的是字符串的全部内容,但是如果我们输入的是这样的内容,printf(“%s”,a+1),其就意味着,此时关于字符串的打印是从第二个元素开始至尾部而不是像一开始的从头到尾部的打印,其最后结果为bcdefg。

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mllllk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值