• 指针概念;数组指针、字符串指针、结构体指针、动态内存申请、指针数组;


    指针概念指针内存结构:变量名->变量存的值(内存)->(内存)值的地址。

    (1)指针变量*p:存的是指针(即地址)。指向:指针变量存的地址指向内存地址。(如:p=&a;)

    (2)&取变量或内存地址。
       *①声明指针变量②访问变量所指内存。区别:①中最前面有数据类型。
    (3)函数是一种预编译结构,使用完后,函数连同所生成的内存空间会被系统回收
    (4)址传递的好处,解决函数只能返回一个返回值的问题。
    通过修改指针变量存的地址,保持内存地址对应的值不变。(p=?)
    或者改变内存地址对应的值,保持指针变量存的地址不变。(*p=?)
    达到对内存任意操作的效果。
    (5)指针操作字符更为方便,因为字符中有''。数组中没有结束标志,只有长度大小。
    因此对数组操作常用for,对字符操作常用while。 
    (6)函数返回值为空时,最好在函数内输出。通过指针修改值可在主函数内输出,若通过修改地址还是要在函数内输出。

    
    (1)数组指针:即指向整形数组类型的指针。int a[2]={4,6};int *p;p=a;(p是变量,*(p+2)=a[2]。a是常量,因此a++是错误的)指针变量加1,其结果相当于加一个其指向的字节数。
    (2)数组名字就是数组指针。数组名字指向数组的首个元素。a == &a[0];
    (3)字符串指针:即指向字符数组类型的指针。char *p;p="ios";
    (4)动态申请内存:指针变量存的地址=(类型*)malloc(sizeof(类型));作用:申请地址所指的内存。返回值:内存地址。
    free(指针变量存的地址);作用:释放地址所指的内存空间。
    strcmp(s1,s2);作用:比较字符串大小。返回值为-1,0,1。
    (int)strlen();求数组(字符串)长度,返回值为长整形。
    (5)结构体指针 (访问方式->)
    结构体可以做传递参数和返回类型
    (6)指针数组,即指针类型的数组。int * a[3]={,,};或char * str[3]={,,};(二级指针)。
    void change1(int x,int y);
    void change1(int x,int y)
    {
        int tmp = 0;
        tmp = x;
        x = y;
        y = tmp;
    }
    
    void change2(int *x,int *y);
    void change2(int *x,int *y)
    {
        int tmp = 0;
        tmp = *x;
        *x = *y;
        *y = tmp;
    }
    
    
    int fun(int m,int n,int *c );
    int fun(int m,int n,int *c )
    {
        int r = m + n;
        *c = m - n;
        return r ;
    }
    
    int main(int argc, const char * argv[])
    {   /*
        int i = 10,j = 3;
        
        int *p;//声明指针变量
        
        p = &i;//取i的地址赋值给p;
        printf("%d
    ",sizeof(p));
        printf("p所指内存中的数据是%d",*p);
        */
      /*
        //指针基础
        int a = 10,b = 20;
    //    int tmp = 0;
    //    tmp = a;
    //    a = b;
    //    b = tmp;
        
        //2传值和传址
        change1(a, b);
        printf("a = %d,b = %d
    ",a,b);
        change2(&a ,&b );
        printf("a = %d,b = %d
    ",a,b);
        
        */
        //3函数有多个返回值
        int m = 10,n =8;
        int z = 0;
        int result = fun(m, n, &z);
        printf("result = %d,z = %d
    ",result,z);
        return 0;
    }

    2

    #include <stdlib.h>
    #include <string.h>
    
    struct point
    {
        int x;
        int y;
    };
    typedef struct point xpoint;//重定义数据类型
    
    int main(int argc, const char * argv[])
    {
        /*
      //改址
      int a = 10,b = 20;
      int *x,*y,*temp;
      x = a;
      y = b;
      temp = x;
      x = y;
      y = temp;
      printf("%d,%d ",*x,b);
        //数组指针
        int arr[] = {1,3,6,8,12};  
        int *p;
        p = arr;
        p++;    //指针偏移
        printf("*p = %d
    ",*p);
        
        
        p = arr;
        for(int i = 0;i < 5;i++)
        {
            printf("%d	",*(p+i));
        }
        printf("
    ");
        
    //    p = arr;
    //    while (p != NULL) { //没有结束标记,结果出错
    //        printf("%d	",*p);
    //        p++;
    //    }
        
        //字符串
         char *str = "hello ios";
        printf("str = %s 
    ",str);
        
        char a[] = "hello mac";
        char *q = a;
        printf("*q = %s
    ",q);
        
        char *str1;
        str1 = "hello";
        //*str1 = "hello";
        printf("str1 = %s",str1);//字符的实质是数组
        
    //    int *p_1;  //出错
    //    scanf("%d",p_1);
    //    printf("%d
    ",*p_1);
        */
        /*
        //申请内存
        int *z;
        z = malloc(sizeof(int));
        scanf("%d",z);
        printf("*z = %d
    ",*z);
        
        //释放
        free(z);
        
        //字符指针申请内存
        char *str2;
        str2 = malloc(sizeof(char)*10);
        scanf("%s",str2);
        printf("str2 = %s",str2);
        
    //    char s1[30] = "SHANGHAI",s2[30] = "JINAN";
    //    printf("%d",strcmp(strcpy(s1, s2), s2));
        */
        /*
        //结构体
        xpoint p1 = {3,5};
        printf("x:%d,y:%d
    ",p1.x,p1.y);
        
        //结构体指针,访问方式不一样
        xpoint *l = &p1;
        printf("x:%d
    ",l->x);     //通过指针访问变量
        printf("y:%d
    ",l->y);
        */
        //指针数组
        char * str[3] = {"phone","android","hello"};
        for (int i = 0; i < 3; i++) {
            printf("%s
    ",str[i]);
        }
        return 0;
    }
  • 相关阅读:
    第二阶段冲刺第五天
    《需求过程——软件建模与分析》读书笔记四
    《需求工程——软件建模与分析》读书笔记三
    《需求工程——软件建模与分析》读书笔记二
    《需求工程——软件需求分析》读书笔记一
    《我们应当怎样做需求分析》阅读笔记
    个人总结
    软件工程概论第十六周学习进度
    第二阶段冲刺第十天
    第二阶段冲刺第九天
  • 原文地址:https://www.cnblogs.com/huen/p/3488903.html
Copyright © 2020-2023  润新知