马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、关于指针(复习复习)
注意的是取值运算符跟定义指针用的都是星号(*),这属于符号的重用,在不同的地方有不同的意义:在定义时表示定义一个指针变量;在其他位置表示获取指针变量指向的变量的值。
如:int a;
int *p=&a; //这就是:在定义时表示定义一个指针变量
printf("%d\n",*p); //这时就是:表示获取指针变量指向的变量的值。(即为a的值)
scanf("%d",p); //这时p表示为a的地址
二、数组和指针
(1)虽然数组和指针关系密切,而且很多功能原理相似,但数组绝不是指针,它们时有区别的,下一讲会讲到。
(2)数组名是数组第一个元素的地址,也是数组的首地址。
(3)指向数组的指针,看下面代码:int a[] = {1, 2, 3, 4, 5};
int *p;
p = a; // 语句1
p = &a[0]; // 语句2
因为数组名即数组第一个元素的地址,所以语句 1 和语句 2 是等价的,都是将数组 a 的首地址存放到指针变量 p 中。
(4)综上两点我们可以知道为什么在使用scanf输入数组值的时候不加&了吧?
三、指针的运算
(1)当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于指向距离指针所在位置向前或向后第 n 个元素。比如 p+1 表示指向 p 指针指向的元素的下一个元素;p-1 则表示指向上一个元素。
(2)注意在加减地址的时候要:*(p+1)或者*(p-1)。
不能 *p+1 这样是对指针变量指向的变量的值减一。
(3)需要郑重强调的是:p+1 并不是简单地将地址加 1,而是指向数组的下一个元素。
(4)编译器怎么这么聪明呢?会知道我们是简单地将地址加 1,而是指向数组的下一个元素呢?其实并不是编译器聪明,而是因为我们自己告诉了编译器的。在哪里告诉了呢?就在我们定义指针变量的时候啊,不是要指定类型的吗。。。。所以。。。
如下图:
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢 |