1. 指针的的理解:
指针属于C/C++语言的范畴内的东西,与程序对内存的使用密不可分,先来介绍容易弄混的符号(token),例如有(例子1): int *p; 那么*p代表什么、&p代表什么、p又是什么?
1.1 理解的基础:
我们常说变量变量,那变量到底是什么呢?在编程中,一个变量会涉及到几个东西token、变量所使用的内存地址、变量的 值。比如我们声明定义int a=100时,此时系统会在内存里开辟一块内存空间,这里假设为0x0009,然后把值100用二进制的形式 存放到该地址空间中,这就完成了一个定义的过程。当我们访问变量时,a这个token表示的是100这个值,&a这个token表示的是0x0009这个地址,实际上它也是一个值。
1.2 回到开始的指针问题
指针无非也是变量,所以该开始的问题也就好理解了,int *p定义了一个指针 **变量**(其实我们可以这么定义int* p),而符号p表示的是变量的值,&p表示变量的地址,*p(注意*p与int *p的区别)指针变量所指向的内存单元的值。
具体实例
void test_pointer(int *p){
p=(int *)malloc(sizeof(int));
*p=100;
}
int main(){
int *ptr;
test_pointer(ptr); //传值来传参
printf("%d\n",*ptr); //输出100
printf("%d\n",ptr); //输出实参ptr的值,也即该指针所指向的地址(malloc分配)
printf("%d\n",&ptr); //该实参ptr自身的内存地址
}
================================================================================================
2. 指针数组与数组指针:
指针数组:指向某一个数组的指针,如表达式int (*p)[5],“()”的优先级比“[]”优先级高,所以表达式表示有一个整型数组里有5个元素,有一个指针p指向该数组;
数组指针:由多个指针组成的数组,即数组里的元素类型为指针类型,例如表达式int *p[5],“[]”优先级高,表示有一个数组存放5个元素,每个元素为一个整型指针(指向整数的指针)。