刘小汶

路漫漫其修远兮,吾将上下而求索。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1. 基本数据类型作为值传递,值不变;
  2. 指针变量格式:变量类型 *变量名;指针变量只能存储地址;
  3. &a就是取普通变量的地址;
  4. p= &a表示指针变量p指向了变量a;指针变量占据8个字节;
  5. *p = 10;  因为之前把a的地址赋值给了p;,所以对p进行赋值就会间接改变a的值;
  6. 我有了你的地址,我就可以改变你的值;指针变量的工作就是存储地址;
  7. 指针就一个作用:能够根据一个地址值,访问对应的存储空间;
  8. int *p;   表示指针变量只能指向整型数据的变量;
  9. 指针变量的作用间接实现了多返回值的作用;
  10. .

指针的使用注意:

  1. 不建议写法1:int *p;   double d = 10.0;   p = &d;因为类型不一样;
  2. 不建议写法2:int *p;    p= 200;    200不能作为指针地址;指针变量只能存储地址;
  3. 注意3:int *p;     printf("%d,*p");    指针变量未经过初始化,不要拿来间接访问其他存储空间;
  4. 注意4:*p在赋值之后代表的是存储空间;    int *p=&a;
  5. 不正确写法5:   *p= &a;   正确的写法是   p= &a;    可以是    *p=‘a’;
  6. 定义变量时的*仅仅是一个象征,没有其他特殊的含义;

指向指针的指针;

  1. int a = 20;int *p =&a;int **pp=&p;int ***ppp=&pp;
  2. 一级指针经常用,二级指针都很少用了;
指针与数组
  1. %d int;%f float\double;%ld long;%lld long long;%c char ;%s 字符串; %zd unsigned long;
  2. 在64位编译器下,任何指针都只占用8个字节的存储空间;
  3. %p可以查看地址值;
  4. 对数组元素的访问有几种方式:1》用数组名来访问:数组名【下标】ages【1】2》用指针做为数组来访问:指针变量名【下标】p【1】3》用*(p+i)来访问;
  5. 指针变量的+1究竟加多少,取决于指针的类型;如果是int的指针类型+1代表加4;如果是double类型的指针,+1代表加8;
  6. 利用一个指针来接受一个数组,指针变量array指向了数组的首元素;
指针与字符串
  1. %s可以输出字符窜直到遇到\0
  2. 利用数组定义字符串:char name[]="it"(字符串变量 ,可以改);利用指针定义字符串:char *name2 = "it"(字符串常量 ,不能改,放在常量区;经常使用;
  3. 内存可以分成两块:常量区(存放一些常量字符串);堆(存放对象);栈(存放局部变量);
  4. 字符串变量;字符串常量;
  5. 指针数组(字符串数组)char *names[5] = {"jack","rose","jake"}
  6. char name[20];printf("请输入姓名:\n");scanf("%s",name);printf("刚才输入的字符串是:%s\n",name);
  7. 注意:数组里面的scanf不用写&;
返回指针的函数:
  1. 只需要看懂语法就行;
  2. char *test(){return "rose"};这个函数为什么有指针;说明这个函数返回的值类型是char *;就是rose这个字符串;
  3. char test(){return "A"};就表示返回值是char类型,就是单字节;
指向函数的指针
  1. 说明函数也有地址;
  2. void(*p)();(*p)是固定写法,代表指针变量p将来肯定是指向函数;左边的void:表示指针变量p指向的函数没有返回值;右边的()表示指针变量p指向的函数没有形参;
  3. 函数名代表函数地址;数组名代表数组的地址;
  4. void(*p)();p=test;(*p)();这个是利用指针变量间接调用函数;也可以写成p( );
  5. char *是传字符串;

posted on 2016-04-08 12:10  williamliuwen  阅读(231)  评论(0编辑  收藏  举报