目录
1.指针和数组
#include<stdio.h>
//数组:一组相同类型元素的集合
//指针变量:是一个变量,存放的是地址
int main()
{
int arr[10] = { 0 };
//&arr[0]和arr都表示首元素的地址
int* p = arr;
//数组通过指针来访问地址
return 0;
}
通过提供指针访问数组:
&arr[i]和p+i打印出来的地址是一样
#include<stdio.h>
//1.指针的形式
void test(int* p, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));
}
}
//2.数组的形式
void test(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);//arr[i] --> *(arr+i)
}
}
int main()
{
int arr[10] = { 0 };
test(arr, 10);
return 0;
}
2.二级指针
问:指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
答:存放在二级指针中。
二级指针变量是用来存放一级指针变量的地址。
3.指针数组
指针数组是指针还是数组?
答案:是数组。是存放指针的数组。
int main()
{
int a = 10;
int b = 20;
int c = 30;
int arr[10];
int* pa = &a;
int* pb = &b;
int* pc = &c;
//parr就是存放指针的数组
//指针数组
int* parr[10] = { &a,&b,&c };
return 0;
}
#include<stdio.h> int main() { int a = 10; int b = 20; int c = 30; int* pa = &a; int* pb = &b; int* pc = &c; //parr就是存放指针的数组 //指针数组 int* parr[10] = { &a,&b,&c }; int i = 0; for (i = 0; i < 3; i++) { printf("%d ", *(parr[i])); } return 0; }
![]()
可以用指针数组模拟出一个二维数组
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");
}*/
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 i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}