C語言 有關指標練習

2021-09-26 04:47:07 字數 3636 閱讀 7358

//一維陣列

#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...