文章目錄
- 本篇梗概
- 一、大小端
- 二,指標與地址的一些題目
- 總結
本篇梗概
- 大小端
- 一些指標和地址的題目
一、大小端
小端:
int a[2]={1,2};

大端:
int a[2]={1,2};

)
二,指標與地址的一些題目
//一維陣列
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a)); //16
printf("%d\n", sizeof(a + 0)); //4
printf("%d\n", sizeof(*a)); //4
printf("%d\n", sizeof(a + 1)); //4
printf("%d\n", sizeof(a[1])); //4
printf("%d\n", sizeof(&a)); //4
printf("%d\n", sizeof(*&a)); //16
printf("%d\n", sizeof(&a + 1)); //4
printf("%d\n", sizeof(&a[0])); //4
printf("%d\n", sizeof(&a[0] + 1)); //4
//字符陣列
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr)); //6
printf("%d\n", sizeof(arr + 0)); //4
printf("%d\n", sizeof(*arr)); //1
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] + 1));//4
printf("%d\n", strlen(arr)); //?
printf("%d\n", strlen(arr + 0));//?
//printf("%d\n", strlen(*arr)); //()中的是字符,不是指標,不能求
//printf("%d\n", strlen(arr[1]));//同上
//printf("%d\n", strlen(&arr));//&a是陣列指標,不是字符指標,不能求 char(*p)[6];
//printf("%d\n", strlen(&arr + 1));//同上
printf("%d\n", strlen(&arr[0] + 1));//?
//因為&a取的是整個陣列的地址,而strlen只能用來求字串,由于C語言中沒有字串型別,字串只能存盤在字符陣列中或由字符指標指向,所以strlen()中的必須為字符指標,
char arr[] = "abcdef";
printf("%d\n", sizeof(arr)); //7
printf("%d\n", sizeof(arr + 0));//4 arr+0視為地址
printf("%d\n", sizeof(*arr));//1
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] + 1));//4
printf("%d\n", strlen(arr)); //6
printf("%d\n", strlen(arr + 0)); //6
//printf("%d\n", strlen(*arr));
//printf("%d\n", strlen(arr[1]));
//printf("%d\n", strlen(&arr));
//printf("%d\n", strlen(&arr + 1));
printf("%d\n", strlen(&arr[0] + 1));//5
char *p = "abcdef";
printf("%d\n", sizeof(p)); //4
printf("%d\n", sizeof(p + 1)); //4
printf("%d\n", sizeof(*p)); //1
printf("%d\n", sizeof(p[0])); //1
printf("%d\n", sizeof(&p)); //4
printf("%d\n", sizeof(&p + 1)); //4
printf("%d\n", sizeof(&p[0] + 1)); //4
printf("%d\n", strlen(p)); //6
printf("%d\n", strlen(p + 1)); //5
//printf("%d\n", strlen(*p));//*p不是指標
//printf("%d\n", strlen(p[0]));//同上
//printf("%d\n", strlen(&p)); //二級指標
//printf("%d\n", strlen(&p + 1));//同上
printf("%d\n", strlen(&p[0] + 1)); //5
//二維陣列
int a[3][4] = { 0 };
printf("%d\n", sizeof(a)); //48
printf("%d\n", sizeof(a[0][0])); //4
printf("%d\n", sizeof(a[0])); //16
printf("%d\n", sizeof(a[0] + 1)); //4
printf("%d\n", sizeof(*(a[0] + 1)));//4 a[0][1]
printf("%d\n", sizeof(a + 1));//4
printf("%d\n", sizeof(*(a + 1)));//16
printf("%d\n", sizeof(&a[0] + 1));//4
printf("%d\n", sizeof(*(&a[0] + 1)));//16
//&a[0]+1等價于a+1
printf("%d\n", sizeof(*a));//16
printf("%d\n", sizeof(a[3]));//16
//cpp[-1][-1]=*(*(cpp-1)-1);
int main()
{
int a[3][4];
printf("%p\n", a);
printf("%p\n", a+1);
printf("%p\n", &a+1);
printf("%p\n", a[0]+1);
printf("%p\n", &a[0]+1);
system("pause");
return 0;
}

sizeof()中,a[0]+1為地址,a[0]+1等價于a [0] [1],a[0]相當于a[3] [4]第一行的陣列名,即a[0]相當于一個含四個元素的一維陣列,故a[0]+1等價于a[0] [1]
a為陣列
a+0為地址
int a[]={1,2,3,4,5,6,7,8,9,10};
int *p1=&a[0];
int *p2=&a[10];
int n=p2-p1=10;
//指標相減的值為相差資料的個數
總結
以上就是本篇文章的內容,介紹了大小端的概念和指標與地址的一些題目,題目包含了初學指標常見的一些錯誤,仔細研究定能有所識訓,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277139.html
標籤:其他
上一篇:web簡易視頻聊天室+媒體流插入
下一篇:資料結構 堆疊的基礎應用
