C語言指標的運算(指標加或減一個整數的意義)
阿新 • • 發佈:2019-02-10
指標可以加上或減去一個整數。指標的這種運算的意義和通常的數值的加減運算的意義是不一樣的,以單元為單位。例一:
指標 ptr 被加了 1,編譯器是這樣處理的:它把指標 ptr 的值加上了 sizeof(int),在 32 位程式中,是被加上了 4,因為在 32 位程式中,int 佔 4 個位元組。由於地址是用位元組做單位的,故 ptr 所指向的地址由原來的變數 a 的地址向高地址方向增加了 4 個位元組。由於 char 型別的長度是一個位元組,所以,原來 ptr 是指向陣列 a 的第 0 號單元開始的四個位元組,此時指向了陣列 a 中從第 4 號單元開始的四個位元組。例二:
#include<stdio.h>
int main()
{
char a[]="0123456789";
int *ptr = (int *)a;
char *cp = a;
printf("%d\t%d\n",sizeof(int),sizeof(char));
while(*ptr!='\0')
{
printf("%c\n",*ptr);
ptr++;
}
//while(*cp!='\0')
//{
// printf("%c\n",*cp);
// cp++;
//}
return 0;
}
執行結果:指標 ptr 被加了 1,編譯器是這樣處理的:它把指標 ptr 的值加上了 sizeof(int),在 32 位程式中,是被加上了 4,因為在 32 位程式中,int 佔 4 個位元組。由於地址是用位元組做單位的,故 ptr 所指向的地址由原來的變數 a 的地址向高地址方向增加了 4 個位元組。由於 char 型別的長度是一個位元組,所以,原來 ptr 是指向陣列 a 的第 0 號單元開始的四個位元組,此時指向了陣列 a 中從第 4 號單元開始的四個位元組。例二:
執行結果:#include<stdio.h> int main() { char a[]="0123456789"; int *ptr = (int *)a; char *cp = a; printf("%d\t%d\n",sizeof(int),sizeof(char)); //while(*ptr!='\0') //{ // printf("%c\n",*ptr); // ptr++; //} while(*cp!='\0') { printf("%c\n",*cp); cp++; } return 0; }