为什么c语言指针那么难?

2024-11-04 08:19:13
推荐回答(4个)
回答1:

指针确实难于理解。指针具有两个身份:

第一,指针本身是一个变量。只要是是变量,它就占用内存地址。当然如果没有分配内存地址,不在其内。

第二,指针包含一定的一个内容。指针所特殊的就是,他的内容保存的是其他变量的地址。

以上两点可以通过书中的示例7-7有比较好的体现。

例如,定义指针变量intp1。 intp1=&a 就表示 intp1保存的信息为a的地址。
而*intp1表示是intp1所保存地址的内存单元所保存的值,实际就是a的值。

所以,你给出的 *intp1=&a; 是一种不太合适写法。我们可以这样假设,再给一个变量b。令*intp1=b=&a,则
b=&a,说明b保存的a的地址,这样b就是一个指针。那*intp1=b,则说明 intp1所保存的地址指向的内存单元为b。所以,intp1可以看成a的指针的指针。

上面这个例子比较绕,慢慢想想,就理解了。

回答2:

指针没什么难的好吧,其实指针的难点在于应用,可是有很多人在接触指针的时候首先会对指针的理解上感到困难。
首先呢,在C语言里面,一个程序里面的变量在内存里面是紧挨着的,而且每个变量的都有一个地址,所以这个地址也是紧挨着的,一般情况下,程序员使用十六进制来表示指针的地址比较方便。
我们可以通过(&变量)来得到变量的地址,并且可以把这个地址赋值给一个变量,当然也可以将这个地址传递给某一个子函数。
当一个子函数得到这个地址的时候,可以直接用(“%f”,被赋值某个变量地址的变量)来输出这个变量的地址,而且很厉害的一点就在于,我们可以通过(*被赋值某个变量地址的变量)来得到这个变量的值。

#include

int zizhihanshu(int *f){ //这里就是一个子函数

printf("%p \n",f); //这里我们可以输出变量的地址
printf("%d \n",*f); //在变量前面加*号,我们就可以随时调用这个变量的值了,当然,这个指针f的值是f所指向的那个变量的值,指针f本身就是一个变量,指针变量f的值是所指向的那个变量的地址,指针变量f本身也有一个地址。

}

int main(){
int d = 155;
int ad = 2;
printf("%p \n",&ad); //在主函数里面,我们可以通过&变量来输出这个函数的地址
printf("%p \n",&d);

zizhihanshu(&d); //这里,我们直接给子函数返回一个地址

}
其次,可以用变量d和变量ad的地址用十六进制计算机减一下,你会发现,得到的结果是4或者是(-4),也就是说,一个整数变量在内存里面所占的字节为4个,同时也印证了,一个在代码里面紧挨着的被赋值的变量,在内存里面的地址也是紧挨着的。
&符,取地址
*符,将地址上的值反应出来

C语言的指针其实是很容易理解的,关键在于之后在实际操作中怎么灵活的运用指针。如果学到指针这个知识点的时候,进展不是很好的话,可以在网络上搜索一些关于内存方面的知识,这样可以帮助理解。

回答3:

指针是C语言的精华之一,在C语言中绝大多数要用到指针,通过指针来进行地址里面内容的操作是一种很重要的方法,固然重要,然而,重要与难度是一对无关变量,正如,有的知识很重要,它却很简单,有些知识很难,它却不重要,这种问题没有直接的关系,总之,只要是好好学,再难的知识也可以攻破,给你个C的Q群,欢迎一起加入学习67546170

回答4:

因为你不会,会了就不难了