定义变量
int a; //定义一个整型变量a
int *p; //定义了一个整型指针变量p
- 指针有什么用?
存储一个地址。
p = &a; //整型指针p获取了整型变量a的地址
- 指针p指向了整型变量a。
作用:
可以用指针p来操作变量a了。
例如:
{
int a = 10;
int *p;
p = &a;
printf("%d",*p); //输出指针p所指向的内存中的值,这里的*是#间接访问运算符#
}
>>> 10
动态存储方法
malloc(4);
malloc(sizeof(int));
int *p;
p = (int *)malloc(sizeof(int)); //malloc函数返回类型是void *,所以要强制转换
*p = 10; //向指针p所指向的内存空间中存入10
printf("%d", *p); //输出指针p所指向的内存中的值
>>> 10
-
指针就是用来存储内存地址的,为什么要分不同类型的指针呢?
因为指针变量存储的是一个内存空间的首地址(第一个字节的地址),但是这个空间占用了多少个字节,用来存储什么类型的数,则是由指针的类型来标明的。这样系统才知道应该取多少个连续内存作为一个数据。 -
why malloc?
之前的方法,必须预先准确知道所需变量的个数,也就是说我们必须定义出所有的变量。比如我们定义了100个整型变量,那么程序只能存储100个整数。而malloc函数使我们可以在程序运行的过程中根据实际情况来申请空间。
*与&
-
C中的用法
(a) 指针的声明:int p 或 int p; 读法:p是指向一个整数类型的指针。
(b) 复合指针: int p; 或 int p; 读法 p是一个指向一个指向整数类型的指针的指针。(同样道理, int**p等等)
(c) 解引用: x=*p 把指针p指向的值赋值给x -
&在C语言中的用法
(a) 位运算与:x=a&b;
(b) 逻辑与赋值:x&=y;与 x=x&y含义相同
(c) 求地址运算符:p=&x;读法:把x的地址赋给p(指针) -
C++中&的补充用法
C++中有一种C不存在的变量类型引用变量(简单说来为引用),尽管在C语言中用指针也可以实现类似的功能。
引用,指针,地址是联系密切的概念。地址是在电脑内存中的地址(一般是一些变量的值在内存中的储存位置),指针是存地址的变量,所以指针可以“指向”内存地址。概念上讲,引用变量本质上是指针的另一个名字(但是并不能被编译器实例化)
二级指针
想要在函数里修改一级指针的指向,就要用2级指针接收,间接修改一级指针内容
只读操作,不修改一级指针的内容,就用1级指针就可以。
如果函数是一级指针的话,是值传递,并不能改变形参的值。
若有错误请帮忙指正呀,谢谢~