c语言指针,这个p++和p--是什么意思? c语言中指针p[i]和p++什么区别

c\u8bed\u8a00\u6307\u9488*p\u4e2dp++\u4ec0\u4e48\u610f\u601d

\u82e5p\u548cq\u662f\u7533\u660e\u4e3a\u7c7b\u578b\u517c\u5bb9\u7684\u6307\u9488\u53d8\u91cf\uff0c\u4e14\u90fd\u6b63\u786e\u8d4b\u6709\u5408\u6cd5\u503c\u4e14\u4e0d\u4e3aNULL\uff0c\u90a3\u4e48\uff0c*p=*q\u662f\u628a\u6307\u9488q\u6307\u5411\u7684\u76ee\u6807\u503c\u8d4b\u7ed9\u6307\u9488p\u6307\u5411\u7684\u76ee\u6807\uff1bp=q\u5219\u662f\u4f7f\u6307\u9488p\u6307\u5411\u6307\u9488q\u6307\u5411\u7684\u76ee\u6807(\u6700\u7ec8\u662fp\u548cq\u6307\u5411\u4e86\u540c\u4e00\u76ee\u6807\uff0c\u8fd9\u4e2a\u76ee\u6807\u5c31\u662fq\u6307\u5411\u7684\u76ee\u6807)\u3002\u5728q==NULL\u65f6\uff0c*p=*q\u975e\u6cd5\u64cd\u4f5c\uff0cp=q\u662f\u5408\u6cd5\u64cd\u4f5c(\u4f7fp\u548cq\u540c\u4e3aNULL)\u3002\u7efc\u4e0a\uff0c\u9664q\u4e3a\u65e0\u6548(NULL)\u65f6\u4e0d\u80fd\u53d6\u503c\u64cd\u4f5c\u5916\uff0c\u6b63\u5e38\u60c5\u51b5\u4e0b*p=*q\u64cd\u4f5c\u7684\u662f\u6307\u9488\u6307\u5411\u7684\u76ee\u6807\uff0cp=q\u64cd\u4f5c\u7684\u662f\u6307\u9488\u672c\u8eab\u2014\u2014\u8fd9\u662f\u4e8c\u8005\u7684\u672c\u8d28\u533a\u522b\u3002\u4ee5\u4e0b\u4ee3\u7801\u53ef\u4ee5\u9a8c\u8bc1\uff1a#include "stdio.h"int main(int argc,char *argv[]){int *p,*q,a=334,b;q=&a;p=&b;*p=*q;printf("b = %d,\ta = %d\n",*p,*q);//b\u83b7\u5f97\u4e86a\u7684\u503cp=q,b=123;printf("*p = %d,\t*q = %d,\tb = %d\n",*p,*q,b);//p,q\u90fd\u6307\u5411\u4e86a,b\u503c\u672a\u53d8q=NULL;p=q;//NULL\u6307\u9488\u4f5c\u53f3\u503c\u662f\u5408\u6cd5\u7684printf("p = %p,\tq = %p\n",p,q);printf("%d\n",*p);//\u53d6NULL\u6307\u9488\u7684\u503c*p\u662f\u975e\u6cd5\u7684return 0;}\u9a8c\u8bc1\u7ed3\u679c\u5982\u4e0b\uff1a

\u4f60\u95ee\u7684\u662f\u5565\uff1f\u3001
\u6307\u9488p[i],\u8bf4\u660ep\u662f\u4e00\u4e2a\u6570\u7ec4\u6307\u9488\uff0c\u6307\u9488p[i] \u505ap++,\u8fd9\u662f\u5c31\u53d8\u6210\u6307\u9488p[i+1]\u53e6\u5916\u6307\u9488\u3002

\u82e5\u662f\u50cf\u4f60\u6240\u63cf\u8ff0\u7684\uff0c*p[i]\u548cp++\u600e\u4e48\u6bd4\u8f83\uff1f\u6839\u672c\u4e0d\u662f\u4e00\u4e2a\u6982\u5ff5\u7684\u4e1c\u4e1c\uff0c\u4f60\u8981\u6bd4\u8f83\u5565\uff1f
\u4e00\u4e2a\u8bf4\u6570\u7ec4\u6307\u9488\uff0c\u4e00\u4e2a\u662f\u81ea\u52a0\u3002\u3002\u3002

while(*p2) p2++; // 将p2移动到字符串尾,即指向结束符0
p2--; // 回移,p2指向字符串最后一个字符
代码的功能是将字符串首尾对应字符依次交换

首先,你得明白a[]中字符串存储的方式,如图,'\0'结尾。

而p2=p1=a,即*p2=*p1=a[0]='a',初始p2和p1都指向首字母a;

while循环就是让p2地址递增,直至*p2指向字符串结尾'\0',实际想让他指向f故再p2--;

这样就得到两个指针,p1指向首字母a,p2指向结尾字母f,下面的while循环就是首尾交换,没交换一次,p1向后移,p2向前移,直至相遇,结果就是将字符串倒置输出。



++就是指针后移,向内存地址增加的方向移动,对一个字符串来说就是指针右移。--相反

  • c璇█鎸囬拡,杩欎釜p++鍜宲--鏄粈涔堟剰鎬?
    绛旓細while(*p2) p2++; // 灏唒2绉诲姩鍒板瓧绗︿覆灏撅紝鍗虫寚鍚戠粨鏉熺0 p2--; // 鍥炵Щ锛宲2鎸囧悜瀛楃涓叉渶鍚庝竴涓瓧绗 浠g爜鐨勫姛鑳芥槸灏嗗瓧绗︿覆棣栧熬瀵瑰簲瀛楃渚濇浜ゆ崲
  • c璇█*p鍑忓噺浠涔堟剰鎬
    绛旓細c璇█*p鍑忓噺鎸囧厛p--鍐嶅彇p鐨勫煎洜涓 鎸囬拡杩愮畻绗* 涓 鑷 鑷噺 杩愮畻绗 浼樺厛绾 鐩稿悓 鑰屼笖 浠栦滑 鐨勭粨鍚堟柟鍚 鏄 鑷彸鑷冲乏 鎵浠*p++ 涓*p-- 灏辩浉褰撲簬 *(p++ ) 涓*(p--) 浠栨槸 鍏堝紩鐢 鍚庤嚜鍔 鍗 鍏堝彇 *p 鐒跺悗 鎸囬拡p鍐 鑷姞鎴栬嚜鍑 *++p 涓 *--p 灏辩浉褰撲簬 *锛++p 锛変笌 *锛-...
  • C璇█鍏充簬鎸囬拡鐨勯棶棰*++p涓*(p--)
    绛旓細printf("%d ",*++p)锛//++鍜*閮芥槸浠庡彸寰宸︾粨鍚堜袱鑰呬紭鍏堢骇涓鏍锋墍浠ュ拰涓婂彞璇濅竴鏍*p=pa2]printf("%d ",*(p--))锛//鍚-- 涔熷氨鏄厛鎵撳嵃*p 鍦ㄨ嚜鍑忥紝 鎵浠ヨ繕鏄墦鍗皃[2] p -- p=p-1 *p=a[1]p+=3锛沺=p+3 鎵浠 *p=a[4]printf("%d %d ",*p,*(a+3))锛 //a+3 灏辨槸a...
  • 鎸囬拡p p++鍜++p銆乸--鍜--p鍒嗗埆鏈変粈涔堝尯鍒???
    绛旓細1銆乸++ ++p鐩稿綋浜庢妸p鎸囬拡绉诲姩鍒皃鎸囬拡褰撳墠鍊煎姞涓妔izeof(t)鐨勪綅缃紝姣斿p=100锛宻izeof(t)=4锛宲++鎴栬++p涔嬪悗p绛変簬104銆2銆乸-- --p鐩稿綋浜庢妸p鎸囬拡绉诲姩鍒皃鎸囬拡褰撳墠鍊煎噺鍘籹izeof(t)鐨勪綅缃紝姣斿p=100锛宻izeof(t)=4锛宲--鎴栬--p涔嬪悗p绛変簬96銆3銆佸叾涓++鎴栬--鍦ㄥ悗闈紝鍏堜互p褰撳墠浣嶇疆鏉ヨ绠...
  • 鎸囬拡p鍜宲鏈変粈涔堜笉鍚?
    绛旓細c璇█鐨鎸囬拡閮ㄥ垎 *p涓巔鍖哄埆濡備笅锛1銆佷綔鐢ㄤ笉鍚 p琛ㄧず姝ゆ寚閽堟寚鍚戠殑鍐呭瓨鍦板潃涓瓨鏀剧殑鍐呭銆俻鏄竴涓寚閽堝彉閲忕殑鍚嶅瓧锛岃〃绀烘鎸囬拡鍙橀噺鎸囧悜鐨勫唴瀛樺湴鍧銆2銆佽緭鍑哄唴瀹圭殑鏍煎紡涓嶅悓 p甯哥敤鍦ㄤ竴涓拰鎸囬拡绫诲瀷涓鑷寸殑鍙橀噺鎴栬呭父閲忋俻杈撳嚭涓涓寚閽堢殑鍦板潃锛岄氬父鏄緭鍑轰竴涓16杩涘埗鐨勬暟銆3銆佹晥鏋滀笉鍚 p鏄缂栬瘧鍣ㄤ粠鎸囧畾鐨...
  • c璇█鐨鎸囬拡閮ㄥ垎*p涓巔鐨勫尯鍒槸浠涔?
    绛旓細p鏄鎸囬拡鍙橀噺锛屽叾鍊兼槸涓涓彉閲忕殑鍦板潃銆俻鏀跺埌浜嗗摢涓彉閲忕殑鍦板潃锛屽氨鎸囧悜鍝釜鍙橀噺銆傝鍙橀噺鎴愪负p鐨勫璞°俻鏄痯鎵鎸囧悜鐨勫璞$殑鍊笺備緥濡:inti=3,*p;p=&i;娉ㄦ剰:p鏀跺埌i鐨勫湴鍧锛屾晠p鎸囧悜i锛宨鏄痯鐨勫璞°俻rintf("%d,%d\n",i,*p);杈撳嚭:3,3娉ㄦ剰:*p鏄痯鎵鎸囧悜鐨勫璞$殑鍊硷紝鍗砳鐨勫笺C璇█ C璇█鏄竴...
  • c璇█涓,*p--=0浠涔堟剰鎬?
    绛旓細p--=0琛ㄧず鍏堝鎸囬拡p鎵鎸囧悜鐨勫唴瀛樺崟鍏冭祴鍊间负0锛屼箣鍚庯紝灏嗘寚閽坧鐨勫湴鍧鍑1涓涓唴瀛樺崟鍏冪殑澶у皬銆傚彲浠ラ氳繃濡備笅鐨勭▼搴忔鏉ヨ繘琛岀悊瑙o細int a[]={1,2,3,4}; // 瀹氫箟涓涓猧nt鍨嬫暟缁勶紝骞惰繘琛屽垵濮嬪寲int *p=&a[2]; // 瀹氫箟涓涓猧nt鍨嬫寚閽堝彉閲忥紝骞舵寚鍚慳[2]鎵鍦ㄧ殑鍐呭瓨鍗曞厓printf("%x\n", p); /...
  • C璇█鎸囬拡?
    绛旓細p鏄痠nt鍨鎸囬拡鏁扮粍锛屽嵆p鐨勬瘡涓厓绱犻兘鏄痠nt鍨嬫寚閽堛傜敱for寰幆鍙煡锛宲[0]绛変簬&a[0]锛宲[1]绛変簬&a[4]锛宲[2]绛変簬&a[8]銆傚垯p[2]+1=&a[8]+1=&a[9]銆傛墍浠ワ紝*(p[2]+1)灏辩瓑浜巃[9]锛岀粨鏋滄槸锛10銆
  • 姹C璇█涓鎸囬拡--p鏄粈涔堟剰鎬
    绛旓細鎵鎸囧悜鐨勭被鍨锛屾寚閽鐨勫兼垨鑰呭彨鎸囬拡鎵鎸囧悜鐨勫唴瀛樺尯锛岃繕鏈夋寚閽堟湰韬墍鍗犳嵁鐨勫唴瀛樺尯銆傝鎴戜滑鍒嗗埆璇存槑銆傚厛澹版槑鍑犱釜鎸囬拡鏀剧潃鍋氫緥瀛愶細渚嬩竴锛(1)int *ptr;(2)char *ptr;(3)int **ptr;(4)int (*ptr)[3];(5)int *(*ptr)[4];濡傛灉甯埌浣狅紝璇烽変负婊℃剰绛旀鍚э紒锛侊紒鏈変粈涔堜笉鎳傜殑鍙互Hi鎴戝搱,澶у...
  • C璇█鎸囬拡**p鏄粈涔堟剰鎬
    绛旓細p琛ㄧずp涔熻〃绀哄湴鍧锛岀畝鍗曠殑璇锛岃繖涓鍦板潃瀵瑰簲鐨勫瓨鍌ㄥ崟鍏冨瓨鍌ㄧ殑鏁颁篃鏄竴涓湴鍧锛岃屼笉鏄暟鍊硷紝鑰岃繖涓瀛樺偍鐨勫湴鍧瀵瑰簲鐨勫瓨鍌ㄥ崟鍏冨瓨鍌ㄧ殑鏁版嵁鎵嶆槸鐪熸鐨勭浉搴旂被鍨嬬殑鏁板!渚嬪锛歩nt i=10; //瀹氫箟浜嗕竴涓暣鍨嬪彉閲 int *p=&i; //瀹氫箟浜嗕竴涓寚閽堟寚鍚戣繖涓彉閲 int **p1=&p; //瀹氫箟浜嗕竴涓簩绾ф寚閽堟寚鍚p鎸囬拡...
  • 扩展阅读:c#泛型方法 ... c语言输出格式大全 ... c++如何一键注释 ... c#调用c++ ... c#是什么 ... c#一键注释 ... 学c#有前途吗 ... c#难还是c++难 ... c语言 p++和 p ++的区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网