//一維陣列
#include #include #include int main()
; printf("%d\n", sizeof(a));//16
//陣列首位址,大小當然是陣列的大小,這裡的a不僅僅是乙個指標,還代表了乙個陣列
printf("%d\n", sizeof(a + 0));//4 陣列首元素位址
printf("%d\n", sizeof(*a));//4 陣列首元素a[0]
printf("%d\n", sizeof(a + 1));//4 a[1]位址
printf("%d\n", sizeof(a[1]));//4 a[1]
printf("%d\n", sizeof(&a));//4 陣列首位址,這時候僅代表乙個位址
printf("%d\n", sizeof(*&a));//16 陣列首位址解引用,代表整個陣列
printf("%d\n", sizeof(&a[0]));//4 首元素位址
printf("%d\n", sizeof(&a[0] + 1));//4 a[1]位址
system("pause");
return 0;
}
// 字元陣列
#include #include int main()
; printf("%d\n", sizeof(arr));//5
printf("%d\n", sizeof(arr+3));//4
printf("%d\n", sizeof(*arr));//1
printf("%d\n", sizeof(arr+1));//4
printf("%d\n", sizeof(arr[1]));//1
printf("%d\n", sizeof(&arr));//4
printf("%d\n", sizeof(&arr+1));//4
printf("%d\n", sizeof(&arr[0]));//4
printf("%d\n", sizeof(&arr[0]+1));//4
//字元陣列不可以用strlen()函式,因為strlen以\0為界
printf("%d\n", strlen(arr));//19
printf("%d\n", strlen(arr + 0));//19
printf("%d\n", strlen(&arr[0] + 1));//18
system("pause");
return 0;
}
//字串陣列
#include #include int main()
//字串指標
#include #include int main()
//二維陣列
#include #include int main()
; printf("%d\n", sizeof(a));//48
printf("%d\n", sizeof(a[0][0]));//4 int為4
printf("%d\n", sizeof(a[0]));//16 第乙個元素的位址 是個陣列名4*4
printf("%d\n", sizeof(a[0] + 1));//4 a[0][1]的位址
printf("%d\n", sizeof(*(a[0] + 1)));//4 a[0][1]的值
printf("%d\n", sizeof(a + 1));//4 第二個元素的位址,相當於a[1]
printf("%d\n", sizeof(*(a + 1)));//16 第乙個元素,4個int,4*4
printf("%d\n", sizeof(&a[0] + 1));//4 a[1]的位址
printf("%d\n", sizeof(*(&a[0] + 1)));//16 第二個元素,4個int 4*4
printf("%d\n", sizeof(*a));//16 第乙個元素的值
printf("%d\n", sizeof(a[3]));//16 第四個元素的位址,已經越界
system("pause");
return 0;
}
#include #include int main()
; printf("%d\n", sizeof(a));//96
printf("%d\n", sizeof(a[0][0]));//8 double 為8
printf("%d\n", sizeof(a[0]));//32 第乙個元素8*4
printf("%d\n", sizeof(a[0] + 1));//4 a[0][1]的位址
printf("%d\n", sizeof(*(a[0] + 1)));//8 a[0][1]的值
printf("%d\n", sizeof(a + 1));//4 第二個元素的位址,相當於a[1]
printf("%d\n", sizeof(*(a + 1)));//32 第乙個元素
printf("%d\n", sizeof(&a[0] + 1));//4 a[1]的位址
printf("%d\n", sizeof(*(&a[0] + 1)));//32 第二個元素
printf("%d\n", sizeof(*a));//32 第乙個元素
printf("%d\n", sizeof(a[3]));//32 第四個元素,已經越界
system("pause");
return 0;
}
例1.
int a[5] = ;
int * ptr = (int *)(&a + 1);
printf("%d %d", *(ptr + 1), *(a + 1)); // 無效數字 2
例2.
int a[4] = ;
int * ptr1 = (int *)(&a + 1);
char *ptr2 = (char *)((int)a +1);
printf("%x %x", ptr1[-1], *ptr2); //5 3000000
例3.
int a[3][2] = ,, };
int *p = a[2];
printf("%d",p[1]); //6 p[1]相當於*(p+1)
例4.
char **pptr = ;
char ***ppptr = pptr;
printf("%s\n", **++ppptr); //al
printf("%s\n", *--*++ppptr+3); //k
printf("%s\n", *ppptr[-2]+3);//py
printf("%s\n", ppptr[-2][-1]+1);//l
找到一篇好文章:
C語言指標練習
總時間限制 1000ms 記憶體限制 65536kb 在此處補充你的 描述 填寫記憶體交換函式 swapmemory,使得程式輸出指定結果 include using namespace std void swapmemory void m1,void m2,int size void printi...
C語言指標練習
include 函式作用 將指標傳入,連續輸出len個位元組其中的內容 返回引數 無 void pointer output char buf,char len 傳入宣告只能傳入char型別的指標 函式作用 將傳入的值遞減傳入陣列內 傳入引數 無符號整形 char itoa unsigned cha...
有關c語言指標的總結
includevoid main 一維陣列 int num 3 指向陣列長度為3的一維陣列的指標陣列 int p 指向指標的指標 int i p num 把num的首位址傳遞給p,p存放的是num的首位址 includevoid main int argc,char ar argc函式引數個數 ar...