指针(Day-7)

1. 存储及访问:

  1. 内存单元:一个字节,每个内存单元都有编号,也就是内存单元的地址。
  2. 访问方式:
    直接访问:直接通过名字访问;
    间接访问:不知道变量名,通过地址名访问,找到变量所在的地址。
    指针变量存储的是地址
  3. 定义指针变量:
    (1) 定义:类型修饰符 (int *) 变量名 初值 int *p = NULL;
    (指针变量所占的字节数和OS有关,32位-4字节 64位-8字节)

    (2) 打印指针的类型转换符:%p
    取值:* 取址:&
    int *是类型修饰符:int型的指针变量
    (3) 修改,赋值

   int a = 5, b = 8;
   int *pa = &a;
   *pa = 6; //  修改了a里面的值      赋值工作
   b = *pa; //  修改了b的值,对b进行赋值    取值工作

   int c = 5, d =78; // 连续定义: 
   int  *pc = &c, *pd = &d;

2. 指针与数组,字符串

  int a[5] = {1, 2, 3, 4, 5};
  int *p = NULL;
  p = a; 
  p = &a[0];   //  数组名就是数组的首地址  p = &a[0]这样也可以
  /*
  p = &a[0];
  p + 1 = &a[1];
  p + 2 = &a[2];
  ...
  */
  //   指针的偏移量和指向的数据有关
  printf("%p\n", p);
  printf("%p\n", p + 1);
  printf("%p\n", p + 2);
  printf("%p\n", p + 3);
  printf("%p\n", p + 4);
  for (int i = 0; i < 5; i ++) 
      printf("%d  ", *p++);   //   p[i]------->1, 2, 3, 4, 5
  1. 数组遍历:数组名[下标] a[i] 指针变量:*[p + i] = a[i] 指针变量:p[i] = a[i]

  2. 指针和数组的区别:
    指针和数组名都可以通过下标的方法和指针法(p+1)来访问数组元素

    1. 指针可以修改指向
      数组名是常量, 表示首元素的地址,不能改变
    2. 指针的存储空间:4/8字节
      数组的存储空间:元素个数*元素存储空间
  char name[] = "song";
  char *pn = name;
  *pn = ‘a';  // 结果是:aong

  char *name1 = "zhao";
  printf("%s “,name1);  //  可以直接这样输出
  1. 定义字符串有两种方式:
    1. 使用数组定义字符串——> 字符串变量 字符串元素可被改变
    2. 使用指针定义字符串——> 字符串常量 字符串元素不可以改变

定义:数组中的元素都是指针

  char str1[3] = {"iOS", "Android", "HTML5"};
  /*
  str1[0] 是第一个字符指针,指向常量区的iOS
  str1[1] 是第二个字符指针, 指向常量区的Android
  str1[2] 是第二个字符指针, 指向常量区的HTML5
  */
  char *name = "zhao";  //指向常量区
  char *names[] = {"Android", "Java", "c#"};  //指向常量区

3. 指针与函数

void changeValue(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
    // 指针作为函数参数进行传递,可以实现形参的改变,作用到实参
}
void printArray(int *a, int count){
    for (int i = 0; i < count ; i ++) {
        printf("%d  ",*a++);
    }
}
int main(){
   int a[4] = {23, 45, 12, 78};
   printArray(a, 4); //  指针作为形参

   int *p = a;
   printArray(p, 4);  // 指针作为实参
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值