C语言 指针自增自减加减运算 p++ p+i
生活随笔
收集整理的這篇文章主要介紹了
C语言 指针自增自减加减运算 p++ p+i
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
介紹
自增自減代碼
#include<stdio.h> #include<string.h> //指針自增--short void increase(short *arr,int len) {int i;arr=&arr[0];for(i=0;i<len;i++){printf("arr[%d]=%d,address=%p\n",i,*arr,arr);arr++;} }//指針自減--char void decrease(char *ptr,int len1) {int i;printf("%s\n",ptr);ptr=&ptr[len1-1];for(i=len1-1;i>=0;i--){printf("ptr[%d]=%c,address=%p\n",i,*ptr,ptr);ptr--;} } //整型自減--int void down(int *arr,int len) {int i;arr=&arr[len-1];for(i=len-1;i>=0;i--){printf("arr[%d]=%d,address=%p\n",i,*arr,arr);arr--;} } //字符自增--char void up(char *s,int len) {printf("s=%s\n",s);s=&s[0];int i;for(i=0;i<len;i++){printf("s[%d]=%c,address=%p\n",i,*s,s);s++;} } int main() {short arr[]={1,2,3,7,99};char ptr[]={'>','p','I','0','\0'};//只有""后面才會默認加\0char ptr1[]="hello dq";char *ptr2="www.com.pp";int arr1[]={888,9064,3,-3,-4};int len=sizeof(arr)/sizeof(short);int len1=strlen(ptr);int len2=sizeof(arr1)/sizeof(int);int len3=strlen(ptr1);int len4=strlen(ptr2);printf("short指針自增:\n");increase(arr,len);printf("ptr的自增:\n");up(ptr,len1);printf("ptr1的自增:\n");up(ptr1,len3);printf("ptr2的自增:\n");up(ptr2,len4);printf("int指針自減:\n");down(arr1,len2);printf("char指針自減:\n");decrease(ptr,len1);printf("char ptr1的自減\n");decrease(ptr1,len3);printf("char ptr2的自減\n");decrease(ptr2,len4);printf(" 測試1:\n");printf(" ptr1的地址:%p\n ptr1指向的內(nèi)容%s\n *ptr1的內(nèi)容:%c\n ",&ptr1,ptr1,*ptr1);printf(" 測試2:\n");printf(" ptr2本身的地址:%p\n ptr2指向的地址%p\n ptr2指向的內(nèi)容%s\n *ptr2的內(nèi)容:%c\n ",&ptr2,ptr2,ptr2,*ptr2);getchar();return 0; }輸出:
//輸出: //short指針自增: //arr[0]=1,address=012FFBB4 //arr[1]=2,address=012FFBB6 //arr[2]=3,address=012FFBB8 //arr[3]=7,address=012FFBBA //arr[4]=99,address=012FFBBC //ptr的自增: //s=>pI0 //s[0]=>,address=012FFBA4 //s[1]=p,address=012FFBA5 //s[2]=I,address=012FFBA6 //s[3]=0,address=012FFBA7 //ptr1的自增: //s=hello dq //s[0]=h,address=012FFB90 //s[1]=e,address=012FFB91 //s[2]=l,address=012FFB92 //s[3]=l,address=012FFB93 //s[4]=o,address=012FFB94 //s[5]= ,address=012FFB95 //s[6]=d,address=012FFB96 //s[7]=q,address=012FFB97 //ptr2的自增: //s=www.com.pp //s[0]=w,address=00D358E0 //s[1]=w,address=00D358E1 //s[2]=w,address=00D358E2 //s[3]=.,address=00D358E3 //s[4]=c,address=00D358E4 //s[5]=o,address=00D358E5 //s[6]=m,address=00D358E6 //s[7]=.,address=00D358E7 //s[8]=p,address=00D358E8 //s[9]=p,address=00D358E9 //int指針自減: //arr[4]=-4,address=012FFB78 //arr[3]=-3,address=012FFB74 //arr[2]=3,address=012FFB70 //arr[1]=9064,address=012FFB6C //arr[0]=888,address=012FFB68 //char指針自減: //>pI0 //ptr[3]=0,address=012FFBA7 //ptr[2]=I,address=012FFBA6 //ptr[1]=p,address=012FFBA5 //ptr[0]=>,address=012FFBA4 //char ptr1的自減 //hello dq //ptr[7]=q,address=012FFB97 //ptr[6]=d,address=012FFB96 //ptr[5]= ,address=012FFB95 //ptr[4]=o,address=012FFB94 //ptr[3]=l,address=012FFB93 //ptr[2]=l,address=012FFB92 //ptr[1]=e,address=012FFB91 //ptr[0]=h,address=012FFB90 //char ptr2的自減 //www.com.pp //ptr[9]=p,address=00D358E9 //ptr[8]=p,address=00D358E8 //ptr[7]=.,address=00D358E7 //ptr[6]=m,address=00D358E6 //ptr[5]=o,address=00D358E5 //ptr[4]=c,address=00D358E4 //ptr[3]=.,address=00D358E3 //ptr[2]=w,address=00D358E2 //ptr[1]=w,address=00D358E1 //ptr[0]=w,address=00D358E0 // 測試1: // ptr1的地址:012FFB90 // ptr1指向的內(nèi)容hello dq // *ptr1的內(nèi)容:h // 測試2: // ptr2本身的地址:012FFB84 // ptr2指向的地址00D358E0 // ptr2指向的內(nèi)容www.com.pp // *ptr2的內(nèi)容:w加減代碼
指針加減函數(shù):
#include<stdio.h> #include<stdlib.h> #include<string.h> //指針加減函數(shù) void move(char *s,int len,int m) {int i;if(m>=0)//右移{ printf("從前往后移\n");printf("現(xiàn)在處于第%d位:%c,address=%p\n",m,s[m],&s[m]);s+=m;for(i=m;i<len;i++){printf("s[%d]=%c\taddress=%p\n",i,*s,s);s++;}}else//左移{printf("從后往前移\n");//m<0printf("現(xiàn)在處于第%d位:%c,address=%p\n",len+m-1,s[len+m-1],&s[len+m-1]);//s=&s[len+m-1]; 效果一樣s+=len+m-1;for(i=len+m-1;i>=0;i--){printf("s[%d]=%c\taddress=%p\n",i,*s,s);s--;}} } int main() {char *s="abcdefghijklmn";printf("s=%s\n",s);printf("右移:\n");move(s,strlen(s),2);printf("左移:\n");move(s,strlen(s),-4);getchar();return 0; }輸出:
s=abcdefghijklmn 右移: 從前往后移 現(xiàn)在處于第2位:c,address=005857B6 s[2]=c address=005857B6 s[3]=d address=005857B7 s[4]=e address=005857B8 s[5]=f address=005857B9 s[6]=g address=005857BA s[7]=h address=005857BB s[8]=i address=005857BC s[9]=j address=005857BD s[10]=k address=005857BE s[11]=l address=005857BF s[12]=m address=005857C0 s[13]=n address=005857C1 左移: 從后往前移 現(xiàn)在處于第9位:j,address=005857BD s[9]=j address=005857BD s[8]=i address=005857BC s[7]=h address=005857BB s[6]=g address=005857BA s[5]=f address=005857B9 s[4]=e address=005857B8 s[3]=d address=005857B7 s[2]=c address=005857B6 s[1]=b address=005857B5 s[0]=a address=005857B4總結(jié)
以上是生活随笔為你收集整理的C语言 指针自增自减加减运算 p++ p+i的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeforces 318A-C语言解
- 下一篇: codeforces 705A-C语言解