樣例一:
#include <stdio.h>
// 數(shù)組與數(shù)組指針费什。
int mainT3() {
// 定義數(shù)組
// int [] arr = {1,2,3,4}; 錯(cuò)誤的寫法
int arr[] = {1,2,3,4};
// 遍歷數(shù)組
// 其他平臺(tái)不能用 Clion能用, Linux上報(bào)錯(cuò)
/*for (int i = 0; i < 4; ++i) {
}*/
// VS非常嚴(yán)格啦膜,規(guī)范义锥, CLion包容
// Linux上沒有問題探遵,Clion沒有問題窟赏,Mac沒有問題
int i = 0;
for (i = 0; i < 4; ++i) {
printf("%d\n", arr[i]); // 取值
}
// 數(shù)組 和 指針 掛鉤
// 數(shù)組的內(nèi)存地址 == 第一個(gè)元素的內(nèi)存地址 == &arr,下面打印結(jié)果相同
// 數(shù)組的內(nèi)存地址 == 第一個(gè)元素箱季,不是第二個(gè)元素涯穷,也不是第n個(gè)元素
printf("arr = %d\n", arr);//arr = 9829792
printf("&arr = %d\n", &arr);//&arr = 9829792
printf("&arr[0] = %d\n", &arr[0]);//&arr[0] = 9829792
// 既然數(shù)組就是一個(gè)內(nèi)存地址
int * arr_p = arr;
printf("%d\n", *arr_p); // *arr_p 取出元素一內(nèi)存地址的值 1
arr_p ++; // 指針挪動(dòng) 元素二的內(nèi)存地址了
printf("%d\n", *arr_p); // *arr_p 取出元素二內(nèi)存地址的值 2
arr_p += 2;
printf("%d\n", *arr_p); // 輸出4
// 輸出1
arr_p -= 3; // 挪動(dòng)指針指向到 元素一
printf("%d\n", *arr_p);
arr_p += 2000;
printf("%d\n", *arr_p); // 系統(tǒng)值 572662306
// 以后:我想 三維數(shù)組/三級(jí)指針
// int *** arrPpp;
return 0;
}
樣例二:
#include <stdio.h>
// 3.采用指針遍歷數(shù)組。
int mainT4() {
// 定義數(shù)組
// int [] arr = {1,2,3,4}; 錯(cuò)誤的寫法
int arr[] = {1,2,3,4};
// 數(shù)組是連續(xù)的內(nèi)存空間(沒有斷層规哪,有規(guī)律) 數(shù)組 每次挪動(dòng) 4個(gè)字節(jié) == int數(shù)組
int * arr_p = arr;
int i = 0;
for (i = 0; i < 4; ++i) {
printf("位置%d的值是:%d\n", i, * (arr_p + i));
// 04 08 12 16
printf("位置%d的內(nèi)存地址是:%p\n", i, (arr_p + i));
}
return 0;
}
樣例三:
#include <stdio.h>
// 4.循環(huán)時(shí)給數(shù)組賦值求豫。
int mainT5() {
// 定義數(shù)組
// int [] arr = {1,2,3,4}; 錯(cuò)誤的寫法
int arr[4];
int * arrP = arr;
// sizeof arr == sizeof(arr)
// 循環(huán)賦值操作
int j = 0;
for (j = 0; j < 4; ++j) {
// 1.拿到 元素一 元素二 元素三 元素四 的內(nèi)存地址 (arrP + j)
// 2.取出 元素一 元素二 元素三 元素四 的內(nèi)存地址 所對(duì)應(yīng)的值 * (arrP + j)
* (arrP + j) = (j + 10001);
}
// sizeof arr = 16(sizeof arr) / 4(sizeof(int))
// 變量 剛剛賦值的數(shù)組
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
printf("位置%d的值是:%d\n", i, * (arrP + i));
}
return 0;
}
樣例四:
#include <stdio.h>
// 5.數(shù)組指針操作的幾種方式。
int mainT6() {
int arr[] = {1,9,0,9999};
int * arrP = arr;
for (int i = 0; i < 4; ++i) {
// printf("%d\n", arrP[i]);
// printf("%d\n", *(arrP + i)); // + i 挪動(dòng)元素3內(nèi)存地址 再取元素3內(nèi)存地址所對(duì)應(yīng)的值
// printf("%d\n", *arrP + i); 放后面解釋
}
return 0;
}
樣例五:
#include <stdio.h>
// 6.指針類型有何用诉稍?蝠嘉。
int mainT7() {
int num = 12;
int * num_p = #
// 優(yōu)化處理,報(bào)錯(cuò):檢測無法通過的
double * num_p_d = num_p;
printf("%d\n", sizeof num_p);
printf("%d\n", sizeof num_p_d);
// 指針占用的內(nèi)存大小是杯巨? int double xxx 的指針 永遠(yuǎn)都是 4個(gè)字節(jié)(32) 4*2(64)
// 6.指針類型有何用蚤告?。 既然都是 4個(gè)字節(jié)服爷,為什么還要分 指針類型
// 答:取值的時(shí)候杜恰,怎么取获诈,這就是類型規(guī)定的好處
// int * p; // 類型是為了計(jì)算偏移量
char c = 'a';
// char * p = &c;
// char * p = "AAAA";
return 0;
}