什么是指针?
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另外一个地方的值。由于通过地址能够找到所需变量单元,可以说,地址指向该变量单元。因此,将地中海形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针是一个变量,存在内存单元的地址。(编号)
指针又分为一级指针和二级指针。
一级指针
一级指针主要是用来存放变量(不同类型的变量需要用不用类型的指针来接受)的地址,在函数调用时,形参只是实参的一份临时拷贝。
这个时候我们要做的就是,在调用函数传参数时,要传“址”,而不是传值。将需要改变变量的地址传给参数,因为变量的地址时不变的,这个时候在函数内部只需要访问变量地址就能达到在函数内部更改实参的方式
#include <stdio.h>
#include <stdlib.h>
//函数传值,形参只是实参的一份临时拷贝,main函数中变量不会改变
void change1(int a, int b)
{
a = 5;
b = 10;
}
//函数传址,利用指针的解引用操作改变变量的值
void change2(int* a, int* b)
{
*a = 5;
*b = 10;
}
int main()
{
int a = 2;
int b = 3;
printf("a = %d b = %d\n", a, b); // a = 2 b = 3
//传值
change1(a,b);
printf("a = %d b = %d\n",a ,b); //a = 2 b = 3
//传地址
change2(&a,&b);
printf("a = %d b = %d\n"); //a = 5 b= 10
system("pause");
return 0;
}
二级指针
二级指针主要时用来存放一级地址,可用在函数中保存一级指针
#include <stdio.h>
#include <stdlib.h>
void test(char** p)
{
}
int main()
{
char c = "w";
char* pc = &c;
char** ppc = &pc;
char* arr[10] = {0};
//函数传一级指针地址
test(&pc);
//函数传二级指针
test(ppc);
//函数传指针数组地址
test(arrr);
system("pause");
return 0;
}