#include<stdio.h>
//int main()
//{
//指針:利用位址 它的值指向存在電腦當中另一個地方的值 通過其位址可以找到其記憶體單元 指針是變量-變量裡面存放着位址
//任何存入指針變量的值 就會被當做位址來處理!!!!!!!!
//一個記憶體單元大小:一個位元組
//在32位機上 一個位址是4位元組 在64位機上 一個位址是8個位元組
//指針變量不初始化預設随機産生一個位元組!!!!!
//int a = 1;
//int* p = &a;//p是指針變量-用來存放位址的變量 其類型是 int*
//指針和指針類型
//指針類型決定了指針進行解引用時能通路的空間大小!!!!!
//int* a;a-時能夠通路4個位元組
//char a;a-時能夠通路1個位元組
//double a;*a-時能夠通路8個位元組 !!!!!!!!!!! 決定了之後指派
//printf("%d\n", sizeof(char*));//都是4 因為目前在32位的平台上 預設是4個位元組!!!!!
//printf("%d\n", sizeof(short*));
//printf("%d\n", sizeof(int*));
//printf("%d\n", sizeof(double*));
//int a = 0x11223344;//存放了一個16進制位的數值(兩個數字一位)-是以這個變量所占4個位元組
//int* pa = &a;
//char* pc = &a;
//pa = 0;//位址a的變量4個位元組全變 0-00 00 00 00
//pc = 0;//位址a的變量隻有一個首位元組變成了0-00 33 22 11
////printf("%p\n", pa);//輸出表面一模一樣 但是由上面可得 位址内部并不一樣!!!!!
////printf("%p\n", pc);
//指針+-整數
//指針類型決定了指針走一步走多遠 (指針的步長)
//int* p+1;向後(右)走了 4 個位元組
//char* p+1;向後走了 1 個位元組
//double* p+1;向後走了 8 個位元組
// int a = 0x11223344;
// int* pa = &a;
// char* pc = &a;
// printf("%p\n", pa);//006FF740
// printf("%p\n", pa + 1); //006FF744 整形指針加1位址上加了4個位元組
//
// printf("%p\n", pc);//006FF740
// printf("%p\n", pc+1);//006FF741 符号指針加1位址上加了1個位元組
// return 0;
//}
/*int main()
{
///int p = NULL;//定義指針為空指針
//利用指針列印數組元素
//int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };
//int i = 0;
//int sz = sizeof(a) / sizeof(a[0]);
////int* p = a;//取的是首元素的位址 也可以:int* p=&a[i]; 取第i個元素的位址
//int* p = &a[0];
//for (i = 0; i < sz; i++)//代表移動幾次
//{
// printf("%d\n", p);//列印的是p p代表的是a的位址!!!!!
// p=p + 1;//p向右移一位 -或可以變成p++ -的話是向左移動
//}
//指針(減)-指針:得到 的是中間的元素個數
// int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// printf("%d\n", &a[9] - &a[0]); //右邊da的位址-左邊小的位址(同一個數組才行) //如果是左減右的話數組大小是取其絕對值!
// return 0;
//}
//int my_strlen(char* str) //因為接受的是char的首元素的位址 是以定義的是char*
//{
// char* start = str;//首元素的位址
// char* end = str;//\0的位址
// while (*end != '\0')
// {
// end++;
// }
// return end - start;
//}
//
//int main()
//{//strlen 求字元串長度
//遞歸-模拟strlen 計算字元串長度
// char arr[] = "hello word";//這個數組是 hello word\0
// int len = my_strlen(arr);
// printf("%d\n", len);
// return 0;
//}
//int main()
//{
// int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 90 };
// printf("%d\n", arr);//都是首元素位址
// printf("%d\n", &arr[0]);//都是首元素位址
// //但是:&arr 并不是表示首元素位址 -其是表示(&數組名)-整個數組的位址!!!!!!!!!
// //sizeof(arr)-sizeof(數組名) 表示的也是整個數組 -其計算的是整個數組的大小 !!!!!-機關(位元組)
// return 0;
//}
int main()
{
////二極指針
// int a[] = { 0 };
// int* pa = &a;//一級指針 建立了指針變量pa
// int** ppa = &pa;//二級指針變量-存放了指針變量的位址
// int***pppa = &ppa;//同理:三級指針。。。
//
//指針數組
int a = 10;
int b = 10;
int c = 10;
int* arr2[] = {&a,&b,&c};
int i;
for (i = 0; i < 3; i++)
{
printf("%d\n",*(arr2[i]));//列印arr2每一個數組位址的值
}
return 0;
}