/* 復習 1.指針類型 int *指針類型 指針指向的變量類型指針指向哪個變量2.基本數據類型 4種指針類型 存放的地址 和系統有關系 4個字節數組類型結構體 枚舉 聯合3.指針加法減法 p++ 和數組搭配使用4.兩個運算符 *取值(解引用) &取地址5. *(p+i) p[i] (p是指針 i是整型)p[i]的地址 &p[i] p+i*/#include<stdio.h> #include<string.h> int win;//全局變量 int main() {//1.復習//int* p;//int *p;int * p;沒有任何區別int* p, *q;//定義兩個指針 指針前面要記得單獨加*char chArr[] = "helloworld";//字符數組 存放字符串 棧區char *pArr = "helloworld";//指針 字符串存放在常量區 ,指針指向它存放的首地址 字符串不能(不可以被修改)//代碼區 全局數據區(常量區) 堆區 棧區/*數組輸出 除了字符數組 字符數組 \0作為結尾 printf("%s",chArr);//用printf輸出%s 輸出這個地址和地址后的所有字符 直到遇到\0為止scanf("%s",chArr);//數組名就是數組首地址 數組第一個元素的地址*///相同點 puts(chArr);//都可以用來打印printf strcmp strlen puts(pArr);//不同點 pArr不能用于輸入 //gets(chArr);//gets(pArr);//不可以修改內容//strcpy strcat strlen 字符串的函數 //strcpy(pArr, chArr);//不可以修改常量區//2.指針的加加 ++ 指針加1 // 指針++的時候同時解引用int iArr[10] = { 0 };int iBrr[10] = { 0 };p = iArr, q = iBrr;//*p++; (*p)++; printf("*p=%d,p=%p\n", *p, p);//*p++;*p++=5; //先給*p賦值 然后p++ 等價*p=5,p++printf("*p=%d,p=%p\n", *p, p);printf("*q=%d,q=%p\n", *q, q);(*q)++;printf("*q=%d,q=%p\n", *q,q);/**p++ p加了1 (*p)++ p指向的內容 加了1*(p++) 和*p++沒有區別//課后自己試試* 后++ 取值 p++ 都是操作指針 *p++ (*p)++ 對*p進++ 指向的變量進行++今天的作業題目 測試作用*++p++*p附加題(可以不做) 測試二級指針和數組指針加1之后的地址偏移*///3.指針和數組 (理論)/*指針加1 偏移一個數據的長度數組同樣可以看成一個類型 int arr[10]arr -->大小 存數據 地址*/int idArr[5][10];//二維數組//p = idArr;//類型不一致//方案1//p = &idArr[0][0]; //賦值數組第一個元素地址//for (int i = 0; i < 5 * 10; i++)//用指針給數組賦值//{// *p = i; // p++;// //*p++ = i;//}//方案2//數組指針 指針指向整個數組 //int (*pd)[10]=idArr;int(*pd)[10];//定義一個數組指針//pd= idArr;pd = &idArr[0];//賦值 for (int i = 0; i < 5; i++)//用數組指針給他賦值 {for (int j = 0; j < 10; j++){pd[i][j] = i*j;//使用 }}/*pd[i][j] (*(p+i))[j] *(p[i]+j) *(*(p+i)+j)等價*pd[3] ==>*((pd[3])+0)*///數組指針和指針數組int(*point)[10];//數組指針 指向數組的指針int *parr[10];//指針數組 int* parr[10] 指針數組 10個int* 10個元素都是指針//二級指針 指針保存的是一個一級指針的地址 用到二級指針int **pp;pp= &p;//p是一級指針 pp保存一級指針地址 pp = parr;//指針數組名pp = &parr[0];//parr[0]是一個一級指針 for (int i = 0; i < 5; i++)//循環打印 {for (int j = 0; j < 10; j++){printf("%d\t", idArr[i][j]);}printf("\n");}getchar();return 0;}
?