指针的概念解析,别再搞混了!指针数组和数组指针的区别!

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个元素,每个元素为一个整型指针(指向整数的指针)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章