c需要指针的理解,怎么理解C语言里的指针

1 , 怎么理解C语言里的指针指针类似于是电脑里面的“桌面快捷方式” , 指向了实际的文件内容快捷方式(指针)指向了文件(变量)的地址 。当快捷方式(指针)里面的内容(值)变化的时候,文件(变量)的内容(值)也跟着变化 。当单独删除快捷方式(指针)的时候,文件(变量)仍然存在,并没有因此而删除
2,c语言指针的指针的理解指针 , 即指向数据的储存地址,方便计算机寻找数据,可以指向变量,函数,数组,甚至指向指针(如int **point) , 组合起来,好多方式 。定义并指向一个变量后,没*,point代表变量地址,有*,代表地址里的值即变量值,指向指针的指针**point分开理解,首先指向*point,而*point代表变量的值指针和你刚接触计算机语言一样,刚开始觉得特抽象,学进去了就觉得不就这么回事吗,指针是c/c++的精华,没学好指针就可以说你没学好c/c++,初学感觉没什么用,数组可以胜任,当深入学习后你会发现不用指针的程序效率很低 。
3,C语言里的指针怎么理解始终记住一句话“指针就是地址”!指针指向的“值”,就是该地址指向的“值” 。计算机会自动通过该地址去查找该地址指向的值 。还有就是:“指针”也可以指向另一“指针” 。“指针”还可以指向一个函数 。在数据结构中 , 通常为一个“节点”分配指针去指向另一个“节点” 。前者叫做“父节点”,后者叫做“子节点” 。以下是我的经验:指针就是指向内存中的地址的 。把内存看作N个盒子,把盒子排成一条线 , 每个盒子有编号,0 , 1,2 , 3,4,5,6,7,8,9……这样编下去 。你可以把指针指向任何一个盒子 。比如,你把编号为3的盒子放入一个整数50,那么指向编号为3的指针所指的值就是50 。例子:int a[100]; //声明一个数组*(a+3)=50; //在编号为3的盒子放入整数50所以,指针*(a+3)指向的就是50这个数 。想掌握C语言工作能力 , 请来锐英源,全面能力综合教材海量源码因人施教,保证掌握工作能力,打开成为项目经理或系统分析员之门 。举一个例子,可能一下就明白了 。比如数组a[i],就相当于有许多仓库 , 取数组的数据,你首先要知道i表示第几个仓库 , 然后派人去看看情况,回来再汇报给你;而指针相当于将所有仓库安装了电话 , 当知道第几个仓库,你拿起电话,问一下对方就可以获得仓库的情况,效率要高得多 。指针表示地址,同时可以直接到指定地点进行读、写数据,而变量一般需要获知变量的地址,然后再读、写数据 。指针也是一个变量,里面存放的是所指向的变量的地址打个比方说,变量就好比一个可执行的程序,指针就好比一个快捷方式 。变量保存的是一个值 , 指针保存的是指向变量的地址 。你这么理解 。把项目比作一个国家,指针就是你的身份证,明白不,通过它 。你可以得到相应的一个人的一些信息 。OK不OK?【c需要指针的理解,怎么理解C语言里的指针】
4,C 需要指针变量的意义要说指针变量对于C语言的意义,那就好像太阳对于地球的意义一样,没有它,一切都暗淡了……当然 , 从你这个例子里面,指针就是来打酱油的 。不过这个例子的目的也就是仅仅告诉你一件简单的事:指针可以指向一个变量 。简单的事情往往可以创造奇迹 。有了一个指向变量的东西,参数传递才可以实现“引用”,面向对象才得以从理论走向现实,才有了JAVA、C++、.Net等等这些超强大的晚辈,我好像说得有些远,不如你耐心继续往下学习,渐渐体会“指针可以指向一个变量”到底都能做哪些想象不到的事情?看你的需要了,有时不用指针作为参数达不到你要的效果,比如一个swap()函数 。int swap(int a,int b) { int tmp; tmp=a; a=b; b=tmp; } 如果你想调用该函数交换两个变量的值,在主函数中输出,那是不可能的 。比如这样调用: int x=1,y=2; swap(x,y); printf("%d %d",x,y); 你认为会输出2 1吗?错!还是会输出1 2的 。因为传入swap()函数的只是x,y的拷贝,而不是它们自身 。如果要真正达到交换的目的,就要用指针传值 。这样定义函数: void swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } 但是给函数传值时要注意,指针是指向地址的,所以参数要是地址,即需要给变量取地址 。int x=1,y=2; swap(&x,&y); printf("%d %d",x,y); 这样就是输出2 1了!这个例子是无所谓的指针存在的意义就是可以用来表示动态数组,也可以做为参数传递给函数C/C++中数组的定义如果是int a[100]的话,必须给出确定的数组长度,这样容易造成空间的浪费或不够用,不够用的话就不好办指针的话,它可以指向一段连续的内存,指针的值则是内存的首地址 , 这样的话就无所谓空间的浪费或不够用了,直接往后续就行如int* a = (int*)malloc(10*sizeof(int));声明长度为10的动态数组,数组名就是指针变量的名a,要是不够用了,realloc就可以:a = (int*)realloc(a,10*sizeof(int));(好像是这么用的),可见扩容很方便传参的话,C语言函数一定是值传递,传入的形参是实参的拷贝,这样的话形参传进去后 , 函数改变形参的值,外部的实参的值绝不会变化 。如果传入的实参的地址,函数内部用指针获?。?就可以改变实参的值,因为指针的值,就是实参的内存空间 。5,C语言中对指针的理解与举例子指针就是指向了一个地址的变量数据存储在电脑的内存中,那么它肯定有自己的内存地址比如,int a=3,给a分配了一个地址,但是我们不知道是什么 , 我们设为20吧,在20的地址中存的就是3,当然这里存的是3的二进制 , 因为电脑存储数据就是二进制的int *p;p=&a;定义一个指向a的指针,就是定义了一个指针类型的变量 , 并且也分配一个地址,假设是80,并且这个地址中存放的是 , a的地址,也就是,20 , 当然这里20是以是二进制存的 那么*p=3了就是他指向的地址的值指针就是指向了一个地址的变量数据存储在电脑的内存中,那么它肯定有自己的内存地址比如,int a=3,给a分配了一个地址 , 但是我们不知道是什么,我们设为20吧,在20的地址中存的就是3,当然这里存的是3的二进制,因为电脑存储数据就是二进制的int *p;p=&a;定义一个指向a的指针,就是定义了一个指针类型的变量,并且也分配一个地址 , 假设是80,并且这个地址中存放的是,a的地址,也就是,20 , 当然这里20是以是二进制存的 那么*p=3了就是他指向的地址的值C中的指针,来来去去也就是那几个(我说的都是重点,当然不可能只有这些)基本类型指针结构体指针指针和数组的关系指针数组多级指针指向常量的指针常量指针void指针等等 。。。。。这些不是一两句话就能掌握的 。。LZ还是去看看书或者看看视频吧 。。或者哪里不懂的请追问 。。3Q!首先你要知道指针是一个变量,所以它具有普通变量的性质 。比如你int a 。a是一个变量 。当你创建的时候,系统就会分配给他一个地址空间,它的长度是四字节的 。你可以给这个变量a赋任何小于4字节的大小 。指针也一样 。它也有地址 。它也有值 。不同的是普通变量a,它存的是1,2,3这些数字 。而指针存放的是别人的地址 。事实上也是一个值 。简单点说 。指针就是一个快递员 。它有自己的家 。但他平时要工作,所以很少会回家(指针的地址一般很少用到) 。你会去在意快递员的家在哪吗?一般不会 。你在意的是他的工作 。快递员的工作是什么?快递员的工作就是取快递和送快递 。所以他手上有很多的地址记录 。这样他就可以根据地址去地址所在的地方传快递或拿快递 。(在C里面就是到变量的地址里面改变变量的值,或者取变量的值 。)具体的应用的话,普通指针的应用是很简单的 。跟普通变量一样 。只是前面多了个*号 。如 char *p;p=&a;(取a的地址,这样才可以去拿a的数据,或者传数据给a)有两个概念可能容易搞混的,就是指针函数和函数指针 。函数指针 , 它是一个指针,所以具有普通指针的特点 。也就是它也是取别人的地址,然后去别人的地址拿东西 。跟普通指针不同的是,他是指向一个函数的 。指针函数,它是一个函数 , 它具有普通函数的特点,普通函数做什么的,函数是用来解决问题的一个方法 。函数是有返回值的,void类型就是返回无嘛 。指针函数不同的就是它的返回值是一个指针 。所以你怎去理解指针 。你要把它跟普通的你已经理解的概念联系起来 。比如你定义一个指针,char *p你就可以把它跟char a联系起来 。你要用指针函数 , 你就想想普通的函数是怎么操作的 。不要把它想得太难 。其实也就是那么回事 。首先你要知道指针是一个变量,所以它具有普通变量的性质 。比如你int a 。a是一个变量 。当你创建的时候,系统就会分配给他一个地址空间,它的长度是四字节的 。你可以给这个变量a赋任何小于4字节的大小 。指针也一样 。它也有地址 。它也有值 。不同的是普通变量a,它存的是1,2,3这些数字 。而指针存放的是别人的地址 。事实上也是一个值 。简单点说 。指针就是一个快递员 。它有自己的家 。但他平时要工作 , 所以很少会回家(指针的地址一般很少用到) 。你会去在意快递员的家在哪吗?一般不会 。你在意的是他的工作 。快递员的工作是什么?快递员的工作就是取快递和送快递 。所以他手上有很多的地址记录 。这样他就可以根据地址去地址所在的地方传快递或拿快递 。(在C里面就是到变量的地址里面改变变量的值,或者取变量的值 。)具体的应用的话 , 普通指针的应用是很简单的 。跟普通变量一样 。只是前面多了个*号 。如 char *p;p=&a;(取a的地址,这样才可以去拿a的数据,或者传数据给a)有两个概念可能容易搞混的,就是指针函数和函数指针 。函数指针,它是一个指针,所以具有普通指针的特点 。也就是它也是取别人的地址,然后去别人的地址拿东西 。跟普通指针不同的是,他是指向一个函数的 。指针函数,它是一个函数,它具有普通函数的特点 , 普通函数做什么的,函数是用来解决问题的一个方法 。函数是有返回值的,void类型就是返回无嘛 。指针函数不同的就是它的返回值是一个指针 。所以你怎去理解指针 。你要把它跟普通的你已经理解的概念联系起来 。比如你定义一个指针 , char *p你就可以把它跟char a联系起来 。你要用指针函数,你就想想普通的函数是怎么操作的 。不要把它想得太难 。其实也就是那么回事 。

    推荐阅读