[关闭]
@yanglt7 2019-02-21T11:38:29.000000Z 字数 3716 阅读 1145

第8周:指针

C


8.1.1 指针:取地址运算

运算符&

&不能取的地址

8.1.2 指针:指针

指针

指针变量

作为参数的指针

访问那个地址上的变量*

左值之所以叫左值

指针的运算符&*

8.1.3 指针:指针的使用

指针应用场景一

  1. void swap(int *pa, int *pb)
  2. {
  3. int t = *pa;
  4. *pa = *pb;
  5. *pb = t;
  6. }

指针应用场景二

指针应用场景二b

指针最常见的错误

8.1.4 指针:指针与数组

传入函数的数组成了什么?

数组参数

数组变量是特殊的指针

8.1.5 指针:指针与const

指针是const

所指是const

转换

  1. void f(const int *x)
  2. int a =15;
  3. f(&a); //OK
  4. const int b = a;
  5. f(&b); //OK
  6. b = a + 1; //ERROR

const 数组

保护数组值

8.2.1 指针运算:指针运算

1+1 = 2?

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. char ac[] = {0,1,2,3,4,5,};
  5. char *p = ac;
  6. printf("p =%p\n", p);
  7. printf("p+1=%p\n", p+1);
  8. // *p -> ac[0];
  9. // *(p+1) -> ac[1];
  10. //*(p+n) = ac[n]
  11. printf("*(p+1)=%p\n", *(p+1));
  12. int ai[] = {0,1,2,3,4,5,};
  13. int *q = ai;
  14. printf("q =%p\n", q);
  15. printf("q+1=%p\n", q+1);
  16. printf("*(q+1)=%p\n", *(q+1));
  17. }
  18. //sizeof(int) = 4,sizeof(char) = 1
  19. p =000000000062FE30
  20. p+1=000000000062FE31
  21. *(p+1)=0000000000000001
  22. q =000000000062FE10
  23. q+1=000000000062FE14
  24. *(q+1)=0000000000000001

指针计算

*p++

指针比较

0地址

指针的类型

指针的类型转换

用指针来做什么

8.2.2 指针运算:动态内存分配**

输入数据

malloc

  1. #include <stdlib.h>
  2. void* malloc*size_t size);

没空间了?

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. void *p;
  6. int cnt = 0;
  7. while ((p=malloc(100*1024*1024))) {
  8. cnt++;
  9. }
  10. printf("分配了%d00MB的空间\n", cnt) ;
  11. return 0;
  12. }
  13. 分配了29100MB的空间

free()

常见问题

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注