#define _CRT_SECURE_NO_WARNINGS
cpp
#include <stdio.h>
#include <string.h>
//--------------------------------------------------------------------------------------------------------5. 指针和数组
数组:一组相同类型元素的集合
指针变量:是一个变量,存放的是地址
cpp
int main()
{
int arr[10] = { 1,2,3,4,5, 6,7,8,9,0 };
//arr 数组名是首元素地址(两种例外)
//&arr[0] 也是首元素地址
printf("%p\n", arr);
printf("%p\n", &arr[0]);
//通过指针访问数组
int* p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));
//p指向第一个元素,每次让他+1,因为是int* 类型的指针变量,所以+1一次,跳过4个字节,指向下一个元素
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("%p---------%p\n", &arr[i], p + i);
//验证了地址完全相同
}
return 0;
}
//函数--数组--指针
cpp
test(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
}
int main()
{
int arr[10] = { 1,2,3,4,5, 6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
test(arr, sz);
}
//-----------------------------------------------------------------------------------------------------6. 二级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
这就是 二级指针
cpp
int main()
{
int a = 10;
int* pa = &a; // pa 是一个指针变量,一级指针变量
// int 表示 pa 指向的对象的类型是 int 类型
// * 表示 pa 是指针变量
*pa = 20;
printf("%d\n", a); //20
int** ppa = &pa; // 二级指针,存放 pa 的地址
// int* 代表 ppa 指向的对象的类型是 int*
// * 代表 ppa是指针变量
// *ppa; //pa
// **ppa; //a
**ppa = 30;
printf("%d\n", a); //30
return 0;
}
//总结:二级指针变量 是用来 存放一级指针变量的地址 的//------------------------------------------------------------------------------------------------------7. 指针数组
存放指针的数组,就是指针数组
主语是数组
cpp
int main()
{
int a = 10;
int b = 20;
int c = 30;
//int arr[10] = { 0 };
//int* pa = &a;
//int* pb = &b;
//int* pc = &c;
//parr 存放指针的数组,就是指针数组
int* parr[] = {&a, &b, &c};
int sz = sizeof(parr) / sizeof(parr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(parr[i]));
}
return 0;
}
//指针数组模拟二维数组
cpp
int main()
{
int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
// 1 2 3 4
// 2 3 4 5
// 3 4 5 6
int i = 0;
int j = 0;
//标准的二维数组打印
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n");
//指针数组 模拟二维数组
int arr1[4] = { 1,2,3,4 };
int arr2[4] = { 2,3,4,5 };
int arr3[4] = { 3,4,5,6 };
int* parr[3] = { arr1,arr2,arr3 };
int x = 0;
int y = 0;
for (x = 0; x < 3; x++)
{
for(y=0;y<4;y++)
{
printf("%d ", parr[x][y]);
}
printf("\n");
}
return 0;
}