1.指针就是指向 类型的地址。
eg:
指针和变量
1.int * p; 就是指向整型变量的地址;
2.char * p;指向指向字符变量的地址;
指针和数组:
3.char *p; p = 数组名字;
数组指针
4.int (*p)[5];指向int [5]类型变量的地址;
指针和变量关系test
void PoniterTest(void)//指针测试
{
int a = 10;
int* p = &a;
printf("a :%d *p :%d\n", a, *p);
*p = 100;
printf("a :%d *p :%d\n", a, *p);
}
指针和一位数组关系test
void ArrayAndPointersTest(void)//数组和指针test
{
int myArray[5] = { 1,2,3,4,5 };
int* p = myArray;
for (int j = 0; j < 5; j++)
{
printf("%d ", p[j]); // 等价于 myArray[i]
}
printf("\n");
for (int j = 0; j < 5; j++)
{
printf("%d ", *(p + j)); // 等价于 myArray[i]
}
printf("\n");
for (int j = 0; j < 5; j++)
{
printf("%d ", *(myArray + j)); // 等价于 myArray[i]
}
printf("\n");
for (int j = 0; j < 5; j++)
{
printf("%d ", *(p++)); // 等价于 myArray[i]
}
}
指针和二维数组关系test
void TwoArrayPoniterTest(void)//二维数组和指针测试
{
int myArray[5][5] = { 1, 2, 3, 4, 5,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 };
int* p = (int*)myArray;
int(*p1)[5] = &myArray[0];
for (int j = 0; j < 25; j++)
{
printf("%d ", *(p++)); // 等价于 myArray[i]
}
printf("\n");
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 5; i++)
printf("%d ", *((*(p1 + j)) + i)); // 等价于 myArray[i]
}
}
二维指针和二维数组关系test
void TwoArrayAndTwoPointTest(void)//二维数组 和 二级指针
{
int myArray[5][5] = { 1, 2, 3, 4, 5,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 };
int myArray1[5][5] = { 1, 2, 3, 4, 5,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 };
int* p = (int*)myArray;
int* p2 = (int*)myArray1;
int** p1[2] = { &p ,&p2 };
for (int z = 0; z <= 1; z++)
{
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 5; i++)
{
printf("%d ", *((*p1[z] + i + j)));
}
printf("\n");
}
printf("\n");
}
printf("\n");
printf("\n");
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 5; i++)
{
printf("%d ", *((p + i + j)));
}
}
}
数组指针和数组关系test
void ArrayPonitrTest(void)//数组指针测试
{
// 声明并初始化一个数组
int myArray[5][5] = { 1, 2, 3, 4, 5,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 ,1, 2, 3, 4, 5 };
int myArray1[5] = { 1, 2, 3, 4, 5 };
// 声明一个指向数组的指针(指针的类型应匹配数组元素的类型)
int(*arrayPtr)[5][5];
// 声明一个指向数组的指针(指针的类型应匹配数组元素的类型)
int(*arrayPtr1)[5];
arrayPtr1 = &myArray1;
// 将数组的地址赋给数组指针
// 这里的myArray实际上是数组首元素的地址
arrayPtr = &myArray;
// 现在可以通过指针来访问数组元素
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 5; i++) {
printf("%d ", (*arrayPtr)[j][i]); // 等价于 myArray[i]
}
printf("\n");
}
}
主函数
int main() {
//TwoArrayAndTwoPointTest();
int a = 10;
int* p = (int*)100;
printf("*p =%d \n", p);
ChangePointerValue(&p);
printf("*p =%d \n", p);
printf("\n");
return 0;
}