目錄:
- 1.指標是什么?
- 2.指標的解參考
- 3.指標陣列和陣列指標
- 4.陣列名和&陣列名
- 5.例題求指標和陣列大小
- 例1.求下面代碼輸出的結果
- 例2.求下面代碼輸出的結果
- 例3.求下面代碼輸出的結果
- 例4.求下面代碼輸出的結果
- 6.關于指標和陣列開空間的例題
1.指標是什么?
(1)指標就是個變數,用來存放地址的變數(指標就是地址)
(2)指標的大小是固定的4/8個位元組(32位平臺/64位平臺)
eg: int a = 10; //在記憶體中開辟一塊空間
int * p = &a;//對變數a取出它的地址
//將a的地址存放在p變數中,p就是一個指標變數
a是普通的整形變數,p就是一個指標變數,用來存盤變數a的地址
2.指標的解參考
“解參考”:" * "的作用是參考指標指向變數的值,參考其的作用就是參考該變數的地址
eg: int a = 10;
int* p = &a;
*p = 5;//這就是一個解參考

3.指標陣列和陣列指標
指標陣列:是一個陣列,+1加一個型別的大小
eg:int* arr[10]
陣列指標:是一個指標,+1加一個陣列的大小
eg:int(*arr)[10]
4.陣列名和&陣列名
int arr[20];
arr是陣列名,陣列名表示陣列首元素的地址
特例:sizeof(arr)代表整個陣列的大小
&arr是陣列的地址(陣列指標)
5.例題求指標和陣列大小
例1.求下面代碼輸出的結果
#include<stdio.h>
int main()
{
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
return 0;
}

例2.求下面代碼輸出的結果
#include<stdio.h>
int main()
{
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));//6
printf("%d\n", sizeof(arr + 0));//4,首元素地址是一個char*
printf("%d\n", sizeof(*arr));//1,首元素地址char*解參考char
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首元素地址char*加1還是char*
return 0;
}

例3.求下面代碼輸出的結果
#include<stdio.h>
int main()
{
char p[] = "abcdef";
printf("%d\n", sizeof(p));//7
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
return 0;
}

例4.求下面代碼輸出的結果
#include<stdio.h>
int main()
{
char *p = "abcdef";
printf("%d\n", sizeof(p));//4,是一個指標
printf("%d\n", sizeof(p + 1));//4,char*
printf("%d\n", sizeof(*p));//1,char
printf("%d\n", sizeof(p[0]));//1
printf("%d\n", sizeof(&p));//4,//char*取地址char**
printf("%d\n", sizeof(&p + 1));//4
printf("%d\n", sizeof(&p[0] + 1));//4,char取地址char*
return 0;
}

6.關于指標和陣列開空間的例題
#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
char *str3 = "hello bit.";
char *str4 = "hello bit.";
if(str1 ==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/240840.html
標籤:其他
上一篇:ABP后臺作業詳細設計簡單分析
下一篇:指標和陣列學習筆記1
