2018 3 29陣列運算

2021-08-17 20:10:57 字數 4738 閱讀 3032

#include

#include

#include

int main()

; printf(" %d", sizeof(a));

//16

//當a單獨放在sizeof()中時,a代表的是整個陣列

printf(" %d", sizeof(a + 0));

//(a+0)代表了首元素的位址,所以輸出為4

printf(" %d", sizeof(*a));

//*a代表陣列的第乙個元素1,因為是整形,所以輸出位4

printf(" %d", sizeof(a + 1));

//(a+1)代表了陣列的第二個元素,所以輸出為4

printf(" %d", sizeof(a[1]));

//a[1]也代表的是陣列的第二個元素,所以輸出為4

printf(" %d", sizeof(&a));

//&a代表的是這個陣列的位址,是乙個指標,而指標的大小為4,所以輸出為4

printf(" %d", sizeof(*&a));

//16

//&a代表的是陣列的位址,再加乙個*,就是對整個陣列解引用,所以是整個陣列的大小,單位是位元組。

printf(" %d", sizeof(&a + 1));

//(&a+1)代表陣列中第二個元素的位址,所以輸出為4

printf(" %d", sizeof(&a[0]));

//&a[0]代表了第乙個元素的位址,所以輸出為4

printf(" %d", sizeof(&a[0] +1));

//(&a[0]+1)代表了第二個元素的位址,所以輸出為4

printf("\n");

char arr = ;

printf(" %d", sizeof(arr));

//6//上面說過,陣列名單獨放在sizeof()中時,代表整個陣列。

printf(" %d", sizeof(arr + 0));

//4//括號裡是陣列首元素的位址,而位址在32位下是四個位元組

printf(" %d", sizeof(*arr));

//1//*arr代表的是首元素,首元素是char型,

printf(" %d", sizeof(arr[1]));

//1//arr[1]代表的是首元素,首元素是char型

printf(" %d", sizeof(&arr));

//4//&arr是陣列的位址,而位址在32位下是四個位元組

printf(" %d", sizeof(&arr + 1));

//4//(&arr + 1)代表的是陣列中第二個元素的位址,

printf(" %d", sizeof(&arr[0] + 1));

//4//(&arr[0] + 1)代表的也是第二個陣列元素的位址

printf("\n");

printf(" %d", strlen(arr));

//隨機值

//strlen()是從傳入的位址開始計算,直到\0才結束。而上面這個陣列中沒有\0,所以輸出乙個隨機值

printf(" %d", strlen(arr + 0));

//隨機值

//這個和sizeof()不同,所以還是隨機值

printf(" %d", strlen(*arr));

//error

//*arr代表陣列的首元素,把首元素當做位址傳給strlen(),但這個位址在記憶體中很有可能是不能被訪問的。

printf(" %d", strlen(arr[1]));

//error

//arr[1],代表的是陣列中的第二個元素,所以以它他為位址在記憶體中可能無法被訪問。

printf(" %d", strlen(&arr));

//隨機值

//&arr代表的是陣列的首位址,所以從這個位址開始訪問,到\0結束,而這個陣列缺少\0,所以是隨機值

printf(" %d", strlen(&arr + 1));

//隨機值

//(&arr + 1)代表的是跳過這個陣列之後的位址,到\0結束,我們也不知道什麼地方會有\0,所以是隨機值

printf(" %d", strlen(&arr[0] + 1));

//隨機值

//(&arr[0] + 1)它代表了陣列中第二個元素的位址,從此位址開始計算直到\0結束,這個陣列中無\0,所以不知道什麼時候結束

printf("\n");

char b = "abcdef"; //雙引號中元素最後有\0結尾,而大括號括起來的元素最後無\0;

printf(" %d", sizeof(b));

//7//b在這裡代表整個陣列,6個元素加乙個\0.

printf(" %d", sizeof(b + 0));

//4//(b+0)是首元素的位址,

printf(" %d", sizeof(*b));

//1//*b代表的是首元素,而首元素是char 型。

printf(" %d", sizeof(b[1]));

//1//b[1]代表的是陣列中的第二個元素,這個元素是char型

printf(" %d", sizeof(&b));

//4//&b是陣列的首位址,所以是4個位元組

printf(" %d", sizeof(&b + 1));

//4//(&b + 1)代表的是跳過這個陣列之後的位址,所以它還是乙個位址。

printf(" %d", sizeof(&b[0] + 1));

//4//(&b[0] + 1)是陣列中第二個元素的位址,它是乙個位址。

printf("\n");

printf(" %d", strlen(b));

//6//strlen()是從傳入的位址開始計算,此陣列有6個元素,

printf(" %d", strlen(b + 0));

//6//這個和上乙個相同。

printf("%d", strlen(*b));

//error

//*b代表的是陣列的首元素,把首元素當做位址傳給strlen(),但這個位址在記憶體中很有可能是不能被訪問的。

printf("%d", strlen(b[1]));

//error

// *b代表的是陣列的第二個元素,把第二個元素當做位址傳給strlen(),但這個位址在記憶體中很有可能是不能被訪問的。

printf(" %d", strlen(&b));

//6//&b是這個陣列的首位址位址,從首位址開始到\0結束,一共六個元素

printf(" %d", strlen(&b + 1));

//隨機值

//(&b + 1)代表的是跳過這個陣列之後的位址,但不知道啥時候結束,所以是隨機值

printf(" %d", strlen(&b[0] + 1));

//5//代表的是陣列的第二個元素,從第二個元素的位址開始到\0結束,一共5個元素

printf("\n");

char *p = "abcdef";

printf(" %d", sizeof(p));

//4//因為p是存放a元素的首位址,

printf(" %d", sizeof(p + 1));

//4//(p + 1)代表元素b的位址

printf(" %d", sizeof(*p));

//1//*p代表的是元素a,因為是字元型所以是乙個位元組

printf(" %d", sizeof(p[0]));

//1//p[0]代表的是元素a,因為是字元型所以是乙個位元組

printf(" %d", sizeof(&p));

//4//&p是存放p的位址,它是乙個位址。

printf(" %d", sizeof(&p + 1));

//4//(&p + 1)代表p之後的那個位址,所以它也是乙個位址

printf(" %d", sizeof(&p[0] + 1));

//4//(&p[0] + 1)代表的是元素b的位址,它是乙個位址

printf("\n");

printf(" %d", strlen(p));

//6//p存的是a的位址,從這個位址開始計算到\0結束,一共6個char型元素,

printf(" %d", strlen(p + 1));

//5//(p + 1)代表的是第二個元素的位址,到\0結束,一共5個char型元素,

printf(" %d", strlen(*p));

//error

//*p是a這個元素,當做位址去記憶體訪問時,可能無法訪問。

printf(" %d", strlen(p[0]));

//error

//p[0]a這個元素,當做位址去記憶體訪問時,可能無法訪問。

printf(" %d", strlen(&p));

//隨機值

//因為它從p的位址開始訪問,而不是從a位址開始訪問,我們也不知到什麼時候結束

printf(" %d", strlen(&p + 1));

//隨機值

//因為它從p的位址加1開始訪問,我們也不知到什麼時候結束;

printf(" %d", strlen(&p[0] + 1));

//5//(&p[0] + 1)代表的是第二個元素的位址,到\0結束,一共5個char型元素,

printf("\n");

system("pause");

return

0;}

2018 3 29 省選模擬賽 80

我真是太菜了。t1 10分純暴力沒寫,20分容斥也沒寫 人就是懶死的 還有30分矩乘不會 正解 ioi2018 中國國家集訓隊第一階段作業題解部分 杭州第二中學 吳瑾昭.pdf 最後一題 t2 以為自己能拿到50分,但是其實那個暴力演算法只能過10分的點,n 2000的20分資料用n 3帶剪枝過不了...

運算和陣列

因為短是2個位元組,每個位址不同於2。很難得看到 和 用這樣的方式與指標運算子。然而,更常見的是看到 或 運算元被用來增加或減少乙個指標指向陣列中的下乙個或前乙個元素。指標的算術運算和陣列 如果是乙個指標,指向陣列的第乙個元素 元素0 的陣列,並新增1到指標已經返回下乙個物件,然後排列 1點必須到二...

3 5 陣列運算

ufunc是universal function的縮寫,它是一種能對陣列的每個元素進行操作的函式。本節主要介紹算術運算 比較運算和統計運算等函式。add 函式,即加法運算,是最常用的算術運算函式。示例 a np.arange 0,4 a array 0,1,2,3 b np.arange 1,5 b...