Open topnetfish opened 5 years ago
•数组和指针不可互换场景;•数组和指针可互换场景•多维数组和指针•数组和指针初始化 指针用法 char ch = 'c'; char pch = &ch; char pStr = “abc”;
int m; int *pm = &m;
strcut Test stTest; strcut Test *pst = &stTest;
extern void TestFunc(int m); void (*pf)(int) = TestFunc;
数组用法 char m1[10]; char m2[] = "123"; char m3[] = {'1','2'};
int m4[3][2]; int *m5[10];
数组访问:获取test[1]的步骤:test表示数组起始地址,先获得其地址test地址加上偏移,获取具体值 int Test1() { char test[] = {'1','2','3', '4', '5'}; int m = test[1]; return m; }
指针访问:获取test[3]的步骤:先获取test变量地址。获取test地址的数据,即”12345”地址。上面的”12345”首地址+偏移获取具体值 int Test2() { char *test = "12345"; int m = test[3];
return m;
}
数组和指针不可互换场景:sizeof char arr[] = "123"; int m = sizeof(arr);
char *pstr = "123"; int m = sizeof(pstr);
数组和指针可互换场景(1):函数参数 void TestArray_1(char test[10]) { int m = sizeof(test); }
void TestArray_2(char test[]) { int m = sizeof(test); }
void TestPointer(char *test) { int m = sizeof(test); }
数组和指针可互换场景(2):表达式 char arr[] = "123456"; char ch = arr[2];
char pstr = "123456"; char ch2= (pstr+2); 注意:表达式中,arr[i]总是被编译器翻译成*(arr + i )
多维数组和指针(1):步长 什么是步长:数组或者指针地址,偏移一步的内存大小 char a[10]; // 假设a起始地址:0x100---------------(a+1) = ? 0x101
int b[5]; // 假设b起始地址:0x100 -------(b+1) = ? 0x104
int c[4][2]; // 假设c起始地址:0x100 ------(c+1) = ? 0x108 ----------------(*(c+1) + 1) = ? 0x10C
多维数组和指针(3):函数形参 一维数组 void Test_1(char p[10]); void Test_2(char p[]); void Test_3(char p); 二维数组 void Test_1(char p[10][2]); void Test_2(char p[][2]); void Test_3(char (p)[2]);
注意:形参数组,均会被编译成指针。
数组和指针初始化(1):一维 int test_1[10]; int *test_2;
int test_3[10] = {1,2,3}; int test_4[] = {1,2,3}; char test_5[] = "123";
int m = 0; int *test_6=&m;
test_1[5] = ? 未知或者0
test_2[5] = ? 未知
test_3[5] = ? 0
test_4[2] = ? 3
test_5[5] = ? 未知
sizeof(test_5)=? 4(包含'\0)
请按照功能定义字数组: 定义一个二维数组,用来存放二维地图,其中X轴最大10,Y轴最大20。数据为int型。 定义一个三维数组,用来存放三维地图,其中X轴最大10,Y轴最大20,Z轴最大30。数据为int型。 定义一个数组,数组有10个,每个数组中,存放一个字符串指针。 申明一个函数,函数返回一个二维数组地图,其中最右边空间为10,数据为int型。
参考: 1) int map_1[20][10]; 2) int map_2[30][20][10]; 3) char str_1[10]; 4) int (Func())[10];
•数组和指针不可互换场景;•数组和指针可互换场景•多维数组和指针•数组和指针初始化 指针用法 char ch = 'c'; char pch = &ch; char pStr = “abc”;
int m; int *pm = &m;
strcut Test stTest; strcut Test *pst = &stTest;
extern void TestFunc(int m); void (*pf)(int) = TestFunc;
数组用法 char m1[10]; char m2[] = "123"; char m3[] = {'1','2'};
int m4[3][2]; int *m5[10];
数组访问:获取test[1]的步骤:test表示数组起始地址,先获得其地址test地址加上偏移,获取具体值 int Test1() { char test[] = {'1','2','3', '4', '5'}; int m = test[1]; return m; }
指针访问:获取test[3]的步骤:先获取test变量地址。获取test地址的数据,即”12345”地址。上面的”12345”首地址+偏移获取具体值 int Test2() { char *test = "12345"; int m = test[3];
}
数组和指针不可互换场景:sizeof char arr[] = "123"; int m = sizeof(arr);
char *pstr = "123"; int m = sizeof(pstr);
数组和指针可互换场景(1):函数参数 void TestArray_1(char test[10]) { int m = sizeof(test); }
void TestArray_2(char test[]) { int m = sizeof(test); }
void TestPointer(char *test) { int m = sizeof(test); }
数组和指针可互换场景(2):表达式 char arr[] = "123456"; char ch = arr[2];
char pstr = "123456"; char ch2= (pstr+2); 注意:表达式中,arr[i]总是被编译器翻译成*(arr + i )
多维数组和指针(1):步长 什么是步长:数组或者指针地址,偏移一步的内存大小 char a[10]; // 假设a起始地址:0x100---------------(a+1) = ? 0x101
int b[5]; // 假设b起始地址:0x100 -------(b+1) = ? 0x104
int c[4][2]; // 假设c起始地址:0x100 ------(c+1) = ? 0x108 ----------------(*(c+1) + 1) = ? 0x10C
多维数组和指针(3):函数形参 一维数组 void Test_1(char p[10]); void Test_2(char p[]); void Test_3(char p); 二维数组 void Test_1(char p[10][2]); void Test_2(char p[][2]); void Test_3(char (p)[2]);
注意:形参数组,均会被编译成指针。
数组和指针初始化(1):一维 int test_1[10]; int *test_2;
int test_3[10] = {1,2,3}; int test_4[] = {1,2,3}; char test_5[] = "123";
int m = 0; int *test_6=&m;
test_1[5] = ? 未知或者0
test_2[5] = ? 未知
test_3[5] = ? 0
test_4[2] = ? 3
test_5[5] = ? 未知
sizeof(test_5)=? 4(包含'\0)
请按照功能定义字数组: 定义一个二维数组,用来存放二维地图,其中X轴最大10,Y轴最大20。数据为int型。 定义一个三维数组,用来存放三维地图,其中X轴最大10,Y轴最大20,Z轴最大30。数据为int型。 定义一个数组,数组有10个,每个数组中,存放一个字符串指针。 申明一个函数,函数返回一个二维数组地图,其中最右边空间为10,数据为int型。
参考: 1) int map_1[20][10]; 2) int map_2[30][20][10]; 3) char str_1[10]; 4) int (Func())[10];