C语言中指针很难学吗
发布网友
发布时间:2022-04-30 03:33
我来回答
共5个回答
热心网友
时间:2023-10-09 19:16
一般人觉得指针难学因为在学指针前还没把表达式和变量的概念搞清楚。
1. 指针变量保存的是内存地址。用指针访问数据也称为间接寻址。类似于你找一个人,他住在“第一大院”。你直接去找第一大院就是直接寻址。如果他的住址只有一个住在“第五大院”的人知道,你去第五大院问出他家在第一大院这就是间接寻址。
1.+ 对于上面这种情况,如果我们认为第五大院是“知道他家住址的那个人的住址”,我们就可以进行一连串的间接寻址。另一方面也说明指针变量保存的地址也是数据的一种。
2. 指针变量的类型。指针变量的类型目的*仅仅*在于减少编程中可能发生的错误。这一点必须明确。根本上说指针变量的类型就是地址。我们为了避免不必要的错误强行加上了“只能保存整数的地址”之类的约束。好比住在第五大院的人只会去记中年人的地址。
3. 指针的操作。
3.0 声明:类型A的指针的类型写作 类型A* 比如int*。与此同时int*本身也是类型,我们可以写int**。就是int的指针的指针。
3.1 获取地址,对于内存变量表达式 &运算符可以获得其地址,类型是表达是类型的指针。比如对于变量int a。&a获得的就是类型是int *的a的地址。
3.2 重定向,对于指针变量或者指针变量表达式。*运算符可以获得其指向地址的变量,类型是原指针的上一级。对于int a; int* p = &a; *p等价于a,类型是int。因为*p是变量,我们可以进行x = *p(取值)和*p = 0(赋值)操作。
3.3 &和*都可以对变量表达式进行操作。比如数组int a[10]。我们可以通过&a[5]获得a第5个元素的地址。又如int** a。*a是一个int*类型的变量,我们可以进一步地**a获得类型是int的变量,这就是从第六大院的人口中问出知道A君住址的人在第五大院,然后再去第五大院问出A君住在第一大院的过程。
4. 数组和指针的混合。这个可以说是C/C++语法的bug...
int* a[4] 这个类型可以看成(int*)[4] 元素是int*类型,有4个元素
int (*a)[4] 这个其实是(int[4])* 指向int[4]类型变量的指针。
4.+ 数组变量其实也是指针。int b[4]; 变量b在多数情况下就是一个const int*,指向数组b所占用的内存,也就是数组b的第一个元素。*b和b[0]是等价的。对于int *a;我们可以直接进行a = b的操作,让指向数组b。
5. 指针的加法。对于int *a;我们可以进行a + N, a - N的运算。a + 1指向a指向的元素的下一个元素,相应的a - 1指向上一个元素,以此类推。于是*(a + 1)就对a指向的下一个元素进行重定向,等价于数组运算a[1]。
5.+ 对于int *a, *b; a - b获得的是b到a之间相差多少个元素,类型是int。比如 int x[5]; int *a = &x[0], *b = &x[3]; b - a的结果是3。相应的a - b的结果是-3
这些大体概括了指针的基本内容,可能有疏漏,指针的应用就是指针的基本操作和其他表达式、变量操作的配合。
热心网友
时间:2023-10-09 19:16
指针是c语言的精华。在c++中指针也很常用,只是更多的使用引用,但引用实质上传递的也是指针。
指针很灵活,所以刚开始学习时会有些难度。怎么办?一句话多写多上机调试写好的程序。谭浩强<<c程序设计>>一书上指针一章讲的非常好,这一章应该精读。
指针实例:(冒险岛乐乐指针问题集)
http://zhidao.baidu.com/question/79838545.html
http://zhidao.baidu.com/question/79567174.html
http://zhidao.baidu.com/question/88454662.html
去网上下载下面这个pdf电子书,这个总结非常详细,然后反复看:
C_C++指针经验总结
热心网友
时间:2023-10-09 19:17
这里介绍c语言的初级运用http://hi.baidu.com/zhayuewan/blog/item/298a10d91a00f6ee39012f3b.html
这里介绍高级用法
http://www.javaeye.com/wiki/topic/416199
就我看来指针其实不是很难的,关键你要彻底理解指针的涵义,理解透彻之后,你再看那些指针用法,你就会发现指针相当好用的。
热心网友
时间:2023-10-09 19:17
不会比其他的部分更难学, 只是用的时候更容易出错而已
热心网友
时间:2023-10-09 19:18
指针开始有点难理解,把它像概念一样背下来就好了,时间长了就好了