本篇文章给大家谈谈指针变量可以做加减运算吗,以及指针变量可以加减吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
基类型相同的指针变量不能进行运算的运算符为什么是“+”“-”为什么可以
“-”得到的结果是两个指针值(内存地址)的差距,而相加的话,得到的东西没有意义
指针变量,不能进行哪种运算
不能进行+*/可以进行-值就是两者距离因为+*/对地址操作没有意义
c语言中指针变量可以相加吗其含义是什么
指针指向数组元素时,可以对指针进行以下运算:加一个整数(用+或+=),减一个整数(用-或-=),自加运算,如p++,++p\自减运算,如p--,--p两个指针相减,只有p1和p2都指向同一数组中的元素时才有意义)。
C语言中指针问题
题主的这个问题很有代表性,是很多初学C语言的同学经常会搞混的一个知识点,啥知识点?就是传说中鼎鼎有名的“传值”和“传址”,就这一字之差,却搞得多少英雄好汉竞折腰。
我是石家的鱼,从事C语言答疑解惑的工作,下面我来回答下题主的问题,题主和后来的小伙伴们看看还难不难。小伙伴们有什么问题,或者有不理解的地方,欢迎在评论区与我互动哦!
本回答原创,欢迎转载。不过转载时请注明作者和出处,谢谢!
1、main函数我们先来看main函数。在main函数中,定义了一个变量z。变量z会被保存在内存中,我假设变量z在内存中的地址是0X123。0X123是16进制,至于我为何不用10进制来表示变量z的地址,我只想说,不要拘泥于这种细节嘛!
变量z没有初始值,在内存中保存的示意图如下:
我在示意图中画了一个问号,意思就是变量z还没有一个值。
在main函数中调用了my_power函数,并且这个函数的参数是“&z”,也就是变量z的地址:0X123。题主的意思是想在my_power函数中给变量z一个值。下面,我们就来看看第一个my_power函数。
2、第一个my_power函数好,现在整个程序进入了第一个my_power函数。第一个my_power函数啊,它有一个指针类型的参数:mypower。也就是说,整个程序在进入第一个my_power函数时,系统创造了这个指针变量mypower,注意“创造”这个词语,我用粗体表示了。这个指针变量mypower接收main函数传来的变量z的地址:0X123,那么此时指针变量mypower就指向了main函数中的变量z。如下图所示:
继续看第一个my_power函数。在这个函数中,又定义了一个变量z,只不过这个z是属于第一个my_power函数的。在进入第一个my_power函数时,系统也创造了这个只属于第一个函数my_power的变量z,只不过这个z的地址就不是0X123了,而是另外一个16进制的值,我假设是0X456,如上图所示。在上图中,我在属于第一个my_power函数的变量z下画了一个问号,意思就是在执行第一个my_power函数的“z=pow(x,y);"语句之前,属于第一个my_power函数的变量z没有值。
好了,现在执行第一个my_power函数的“z=pow(x,y);"语句。执行之后,我假设属于第一个my_power函数的变量z的值是1,再执行下面的”mypower=&z;"语句之后,示意图就变成如下这个样子:
看到了吗同学们?此时第一个my_power函数的指针变量mypower指向了属于第一个my_power函数的变量z!天啊!我再强调下,此时第一个my_power函数的指针变量mypower,本来是指向属于main函数的变量z,现在指向了属于第一个my_power函数的变量z!
也就是说,截至到第一个my_power函数全部执行完毕,属于main函数的变量z的值还是没有,我还是用问号标记。而那个属于第一个my_power函数的变量z的值,已经是1了!
OMG!
这还不是重点。重点是,第一个my_power函数全部执行完毕后,系统会“杀掉”属于第一个my_power函数的指针变量mypower和变量z,如下图所示:
我用叉号来表示当第一个my_power函数全部执行完毕后,系统销毁了指针变量mypower以及属于第一个my_power函数的变量z。
此时整个程序又回到了main函数,但是属于main函数的变量z呢?它的值还是没有,还是一个问号。所以题主你看,main函数中最后的printf语句输出的变量z的值是一个莫名其妙的值,是不是?
3、第二个my_power函数好,我们再看整个程序进入的是第二个my_power函数。第二个my_power函数也有一个指针类型的参数:mypower。也就是说,整个程序在进入第二个my_power函数时,系统也创造了这个指针变量mypower。这个指针变量mypower也会接收main函数传来的变量z的地址:0X123,那么此时指针变量mypower也指向了main函数中的变量z。
好了,现在执行第二个my_power函数的“*mypower=pow(x,y);"语句。执行之后,我还是假设pow(x,y)这个函数返回一个值是:1。这个1给了*mypower,也就是给了属于main函数的变量z,示意图如下:
从示意图可以看出,第二个my_power函数的指针变量mypower指向了属于main函数的变量z,而且这个z的值是:1.
第二个my_power函数全部执行完毕后,系统会“杀掉”属于第二个my_power函数的指针变量mypower,如下图所示:
我还是用叉号来表示当第二个my_power函数全部执行完毕后,系统销毁了指针变量mypower。但是,注意我的这个但是,属于main函数的变量z,没有被系统杀死,没有被系统销毁,它安安静静地霸占着0X123这个地址,图中我用勾号来表示。整个程序回到了main函数,main函数一看,哟,我的变量z的值这次对了啊,好开心啊啊哈哈哈!所以main函数最后的printf就输出正确的变量z的值。
4、回味一下题主,各位小伙伴,看出什么了吗?再仔细地慢慢地回味一下。C语言里好多的东西只可意会,不可言传。
小伙伴们还有什么问题,或者有不理解的地方,欢迎在评论区与我互动哦!
c语言中两个变量可以加减吗
c语言中两个变量可以加减。
因为,指针变量是有加减运算的,但是要注意以下几点:
1,指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减。
2,指针变量的自加和自减实际上是与整数1的加减运算。
3,指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。
如果你还想了解更多这方面的信息,记得收藏关注本站。