本帖最后由 chunhuayun 于 2015-9-27 06:42 编辑
10-01指针
1.概念 内存单元的编号也叫地址,根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为【指针】
内存单元的指针和内存单元的内容是两个不同的概念。
2.使用指针的好处 a.为函数提供修改调用变量的灵活手段 b.可以改善某些子程序的效率 在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际的数据,即提高传输速度,又节省大量内存。 c.让函数有多个返回值 d.为动态数据结构(如二叉树,链表)提供支持
3.变量的存取方式 存储方式分为两种:直接存取和间接存取 a.直接存取:变量的赋值和取值(通过变量名存取值) b.间接存取:通过地址获取存储单元的值
4.指针变量 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量,因此,一个指针变量的值就是某个内存单元的地址或称为某个内存单元的指针
注意:严格意义上说:指针就是一个地址,是一个常量 指针变量是存放一个地址,是一个变量 图中,变量就是一个指针变量,
5.定义一个指针变量 其一般形式为: 类型说明符 *变量名; 例如:
int *p;//定义了一个指针变量,变量名是p, int表示,p只能存放一个int类型的变量的地址char *o;//同理与int *p;
6.注意事项 - “*”必须有,如果没有,就相当于定义了一个普通变量
7.指针变量的初始化方法 Inta = 3; Int* p = &a;
注意:指针变量不初始化的后果?
7.1指针变量如果进行初始化?指针变量应该用地址初始化 A.定义的同时进行初始化 1)完全初始化 int *p = &a; 2)部分初始化 int * p1 =&a, *p2; p2= &a; B.先定义后初始化 int*p; p= NULL; 建议定义的时候就初始化 C.定义了一个变量,但是不知道只想谁 int *p =NULL; 7.2常见错误 A.int *p = 1000; //这样会有警告,因为指针变量存储的应该是一个地址而不是一个数,这样做法要杜绝 B.指针变量可以改变指向 例如- int a = 1,b=2;
- int*p = &a;
- int*p = &b;
复制代码
9.注意 地址在内存中占用8个字节 - int a = 10;
- int *p = &a;
-
- printf("a = %ld\n", sizeof(a));
- printf("p = %ld", sizeof(p));
复制代码
打印结果: a = 4 p = 8
|