指標加減運算

2021-08-05 20:07:00 字數 2733 閱讀 8499

#include

#include

//字元陣列

/*指標是4位元組

//指標+指標 錯誤 (指標之間相加無限大,記憶體崩潰,所以指標+指標是不可能)

//指標-指標 得到之間間隔的單元個數。1、算出間隔的位元組數,2、除以調整的權重

int main()

;//x       //      

可以設arr的起始位址是x

int *p = &arr[1];//x+4       

指標是4個位元組,其arr[1]位元組數是x+4

int *q = &arr[9];//x+36      

其arr[9]位元組數是x+36

printf("%d\n",p-q);//-8    

( ( x+4)-(x+36))/4 

printf("%d\n",q-p);//8

printf("%d\n",(char *)q-(char *)p);//32 

字元型sizeof是1

printf("%d\n",(char ***)q-(char ***)p);//8 

去掉乙個*,其是指標

printf("%d\n",(double *)q-(double *)p);//4 

去掉乙個*,其型別double(8個位元組)

printf("%d\n",(short *)q-(short *)p);//16       

short(2個位元組)

printf("%d\n",(int)q-(int)p);//32

其是算數運算

return 0; }

*/ */

/*//指標的算術運算+,-

int main()

*//*

int main()

*/ /*

//指標加法需要調整,調整的權重為指標本身去掉乙個*號,然後求sizeof

//如,指標p+-n,實際加的位址為p+-n*(sizeof(*p))

int main() ;

int *p = arr;

*p = 10;

p++;//加乙個單元格                                 p++ 1.加乙個位元組(不合理)計算太複雜

2.加乙個單元格

//    3.加整個陣列(不合理)只是起點與終點起作用        

//p = (int *)((int )p + 1);

*p = 20;

printf("%d,%x,%d\n",arr[0],arr[0],arr[1]);

return 0; }

*///字串複製

void mystrcpy1(char *des,char *src)//1

des[i] = '\0'; }

void mystrcpy2(char *des,char *src)

*des = '\0'; }

void mystrcpy3(char *des,char *src)

*(des+i) = '\0'; }

void mystrcpy(char *des,char *src)

//字元函式

int main()

//有如下的需求

//str2 = str1; //複製

//str3 += str1;//將新串鏈結到原串的後面

//str1 < str2 //比較大小

return 0; }

/* //字元陣列的初始化

int main() ;

char crr[10] = ;

char drr[10] = "abcd";//字串:一定包含'\0'。  也只有包含'\0'才能成為字串

//char err[4] = "abcd";//error

char frr[4] = ;//不是字串,因為沒用'\0'

char hrr[5] = ;//是字串

printf("%s\n%s\n",frr,hrr);

printf("%d,%d,%d\n",0,null,'\0');

//char *cp = (char *)malloc(10);

//float brr[10];

//short crr[10];

return 0; }

*/ /*

//指標

void fun(int **pp)

int main()

*/#if 0

void swap_err1(int a,int b)//只修改形參值

void swap_err2(int *p1,int *p2)//傳指標但沒有解引用,只修改形參的值

void swap_err3(int *p1,int *p2)//野指標

void swap(int *p1,int *p2)//子函式的改變要想影響到父函式:1、傳指標;2、解引用

//todo 不使用臨時變數交換a,b 的值

int main()

#endif/*

int main()

*//*

//void show(int arr[10],int len)//int *arr,

void show(int *arr,int len)

;//初始化部分內容,剩餘為0

//for(int i=0;ireturn 0; }

*/

指標加減運算 void 的加減

大家都知道對於一般的指標,比如int 等,其加減運算是以元素的大小為單位的。unsigned int s unsigned int 0x1234 cout s 1 endl cout s 1 endl 其結果分別是 0x1238,0x1230 分別加減了乙個unsigned int的大小,也就是4個...

指標的「加 減」 運算,指標儲存(c語言)

int a 10 定義乙個整型變數a,並將10賦值給a int p a 定義乙個整型指標變數p,並將a的位址賦值給p p int 1000 將 int 1000強轉為整型指標 int 並賦值給p 在c語言中,記憶體可以理解為乙個字元陣列,基本單位是位元組,每個位元組包含乙個位址,而位址是由cpu的位...

C語言指標與指標之間的加減運算

知識點 1 指標和指標可以做減法操作,但不適合做加法運算 2 指標和指標做減法適用的場合 兩個指標都指向同乙個陣列,相減結果為兩個指標之間的元素數目,而不是兩個指標之間相差的位元組數。比如 int int array 4 int p int1 int array 0 int p int2 int a...