zoukankan      html  css  js  c++  java
  • C-指针

    //格式:变量类型 *变量名
    //定义了一个指针变量p
    //指针变量只能存储地址
    //指针就一个作用:能够根据一个地址值,访问对应的存储空间
    //指针变量p前面的int;指针变量p只能指向int类型的数据
    int *p;

    int a = 90;

    //指针变量p指向了变量a
    p = &a;

    *p = 10;

    a = 20;

    printf("%d ", *p);
    //printf("%d ", a);

    return 0;

    //利用指针修改
    int main()
    {
        int a = 90;

        change(&a);

        prinf ("%d ", a);
        
        return 0;
    }
    void change(int *n)//int *n = &a;
    {
        *n = 10;//将10赋给地址&a
    }

    格式: 变量类型  *变量名

    定义一个指针变量p

    int *p;

    int a = 90;//分配存储空间给a

    p里面只能存地址

    p = &a;//指针变量p指向了变量a

    以上三行代码在内存中

    通过指针改变a 的值

    *p = 10;

    定义变量时的*仅仅是一个象征,没有其他特殊含义

    利用指针求两个数的和与差

    #include <stdio.h>
    
    int main()
    {
        int a = 10;
        int b = 7;
        
        int sum;
        int min;
        
        sum = sumAndMinus(a, b, &cha);
        
        printf ("和是%d, 差是%d
    ", he, cha);
        return 0;
    }
    
    int sumAndMinus(int n1, int n2, int *n3)
    {
        *n3 = n1 - n2;
        
        return n1 + n2;//指针作用:使函数返回值可以有多个
    }

    任何指针都占用8个字节的存储空间

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     // 0000 0000 0000 0000 0000 0000 0000 0010
     6     int i = 2;
     7     // 0000 0001
     8     char c = 1;
     9     
    10     int *p;
    11     p = &c;
    12     
    13     printf("c的值是%d
    ", *p);
    14     
    15     return 0;
    16 }
    17 /*输出:
    18 c的值是513
    19 */
    20 //使用 int *p 不是 1 而是 513
    21 //原因:int *p 取值赋值时 取赋4个字节内容
    22 //   而 char *p 取值赋值时 取赋一个字节内容
    23 //所以 指针都为8个字节存储空间,却定义指针类型的原因是,取值赋值相对应的类型的存储空间

     *p地址为(从大到小)0000 0000 0000 0000 0000 0010 0000 0001        int值为513

    指针与数组:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int ages[5] = {10, 9, 8, 67, 56};
     6     int *p;
     7     
     8     p = &ages[0];//指针变量p指向了数组的首元素
     9                  //数组名就是数组的地址,也是数组首元素的地址
    10     //p = ages;
    11     //p + 1 的地址取决于指针p的类型 p为int p + 1 地址则增加 4
    12     /*所以:
    13             p + 1 -> &ages[1]
    14             p + 2 -> &ages[2]
    15             p + i -> &ages[i]
    16      */
    17     /*
    18      用指针 遍历数组:
    19      for (int i = 0; i<5; i++)
    20     {
    21         printf("ages[%d] = %d
    ", i, *(p+i));
    22      }
    23     */
    24     return 0;
    25 }

      

    #include <stdio.h>
    
    void change(int array[]);
    int main()
    {
        int ages[5] = {10, 11, 19, 78, 67};
        
        change(&ages[2]);
        
        return 0;
    }
    
    void change(int *array)
    {
        printf("%d
    ", array[2]);
    }
    
    //输出结果: 67

    指针与字符串:

    定义字符串的两种方式 1》利用数组

                char *name = "it";//字符串里面的字符是可以修改的

               2》利用指针

                char *name = "it";//字符串其实是常量字符串,字符不能改

                 适用场合: 不需要修改且经常用到

    1,常量区

    2, 堆

        对象

    3, 栈

        存放局部变量

       使用char name[] = "it";为字符创变量

       char *name = "it";为字符串常量//不能改变值

    返回指针的函数

     1 #include <stdio.h>
     2 
     3 char *test();
     4 
     5 int main()
     6 {
     7     char *name = test();//将函数的返回值赋值给指针
     8     
     9     printf("name=%s
    ", name);
    10     
    11     return 0;
    12 }
    13 
    14 char *test()
    15 {
    16     return "rose";
    17 }

    指向指针的函数:

      

     1 #include <stdio.h>
     2 
     3 void test()
     4 {
     5     printf("调用了test函数
    ")
     6 }
     7 
     8 int main()
     9 {   /*
    10      (*p)是固定写法,代表指针变量p将来肯定是指向函数
    11      左边void :指针变量p指向的函数没有返回值
    12      右边():指针变量p指向的函数没有形参
    13      */
    14     void (*p)();
    15     
    16     p = test;//指针变量p指向了test函数
    17     
    18     (*p)();//利用指针变量简介调用函数
    19    
    20     test();//直接调用函数
    21      p();//简洁写法
    22     
    23 }
  • 相关阅读:
    实验axios用户登录及token验证
    vue的路由跳转了,可是页面没有变化
    搞清楚cookie,session,token,JWT
    APP应用测试流程
    Scrum敏捷开发
    APP项目环境及发布平台
    ssh -T git@github.com ssh: connect to host github.com port 22: Connection timed out
    pytest与unitest区别
    数据库三大范式--大白话
    docker 安装mysql挂载/var/lib/mysql目录时启动就退出
  • 原文地址:https://www.cnblogs.com/IDRI/p/4926267.html
Copyright © 2011-2022 走看看