zoukankan      html  css  js  c++  java
  • IOS开发学习笔记006

    C语言 指针

    简单使用如下:

      int *p;//定义

      int a = 10;

      p = &a;//赋值

      int * b = &a;//定义并赋值

    定义格式:类型 *指针变量名;

    注意事项:

    1、一定要先定义后赋值,用完记得清空。

    2、%p输出指针里面存储的地址值。

    3、清空指针可以用 p = 0;或p = NULL;

    代码示例

     1 #include <stdio.h>
     2 
     3 
     4 //结构体指针测试
     5 struct pStruct
     6 {
     7     int a;
     8     float b;
     9     double d;
    10 };
    11 
    12 //函数指针测试
    13 void pFunc();
    14 int main()
    15 {
    16     int *p ;//定义
    17     int a = 1000;
    18     p = &a;//赋值
    19     printf("%d
    ",*p);
    20     printf("%lu
    ",sizeof(p));//指针长度 8
    21     
    22     
    23     char *cp;
    24     char c = 'a';
    25     cp = &c;
    26     *cp = 'g';
    27     printf("%c
    ",*cp);//
    28     printf("%lu
    ",sizeof(cp));//指针长度 8
    29     
    30     
    31 
    32     
    33     
    34     //指针变量中保存的时变量的地址,地址长度和类型无关,是系统固定的
    35     //指针长度和指针类型无关,和系统字长有关,64位长度位8,32位4
    36     printf("%lu
    ",sizeof(char *));//指针长度 8
    37     printf("%lu
    ",sizeof(short *));//指针长度 8
    38     printf("%lu
    ",sizeof(float *));//指针长度 8
    39     printf("%lu
    ",sizeof(double *));//指针长度 8
    40     printf("%lu
    ",sizeof(long *));//指针长度 8
    41     //函数指针
    42     void (*pF)();
    43     printf("%lu
    ",sizeof(pF));//指针长度 8
    44     //数组指针
    45     int array[2];
    46     int *pArray = array;
    47     printf("%lu
    ",sizeof(pArray));//指针长度 8
    48     //结构体指针
    49     struct pStruct *pS;
    50     printf("%lu
    ",sizeof(pS));//指针长度 8
    51     
    52     return 0;
    53 }

     指针与数组

      定义一个指针,指向一个数组;

      int  array[] = {0,2,4,6,8};

      int *p = array;//array[0] ,指向首地址,数组名就是数组的首地址

    代码示例

     1 #include <stdio.h>
     2 //指针和数组
     3 
     4 
     5 //输出
     6 void show(int array[],int n);
     7 
     8 int main()
     9 {
    10     
    11     //1、指向指针的指针
    12     int a = 10;
    13     int *pa = &a;//定义并初始化一级指针
    14     *pa = 899;//改变变量的值
    15     printf("一级指针:%d
    ",*pa);
    16     int **ppa = &pa;//定义并初始化二级指针,其他三级指针类似
    17     **ppa = 100;//通过二级指针改变变量的值
    18     printf("二级指针:%d
    ",**ppa);
    19     
    20     //2、指向一维数组的指针
    21     int array[] = {0,2,4,6,8};
    22     int *pArray ;//指针
    23     pArray = array;//指向首地址,数组名就是数组的首地址,也可以写array[0]
    24     show(pArray,sizeof(array)/sizeof(int));//输出数组,使用指针传参数
    25     
    26     //*(++pArray);  和 *(pArray+2);的区别,数组指针的p++,p+2 是指指针向下一个元素的首地址
    27     int nElement1 = * ++pArray;//2
    28     pArray = array;//恢复原值
    29     int nElement2 = *(++pArray);//2
    30     pArray = array;//恢复原值
    31     int nElement3 = *(pArray+2);//4
    32     printf("*pArray++:%d 
    *(pArray++):%d
    *(pArray+2):%d
    ",nElement1,nElement2,nElement3);
    33 
    34 
    35 
    36     return 0;
    37 }
    38 
    39 void show(int *array,int n )
    40 {
    41     //遍历数组
    42     printf("数组元素:
    ");
    43     for (int i = 0 ; i < n; i ++)
    44     {
    45         printf("%d ",array[i]);
    46     }
    47     printf("
    ");
    48 
    49 }

    指针和字符串

     1、字符串变量,可修改

        char str[] = "hello";

     2、字符串常量,不可更改

        char *p = "world";

    代码示例

     1 #include <stdio.h>
     2 //指针和字符串
     3 /*
     4  1、字符串变量,可修改
     5     char str[] = "hello";
     6  2、字符串常量,不可更改
     7     char *p = "world";
     8  */
     9 
    10 int main()
    11 {
    12     //字符数组,元素可以自由更改.字符串变量
    13     char str[] = "hello";
    14     char *pstr1 = str;//定义指针指向字符串
    15     printf("%s
    ",str);
    16     printf("%c
    ",*(3+pstr1));
    17     
    18     //字符串指针,这使用和str[]有本质区别,pstr2指向的字符串不能更改,是一个字符串常量
    19     char *pstr2 = "world";
    20     char *pstr3 = "world";//pstr3和pstr2指向同一块内存地址
    21     *pstr2 = 'A';
    22     printf("%s
    ",pstr2);
    23     printf("%c
    ",*++pstr2);
    24  
    25     return 0;
    26 }

    函数指针和指针函数

     1、返回指针的函数,就以普通函数,只不过返回值是一个指针

     类型名 *函数名(参数列表);

     2、函数指针,指向函数地址的指针,是一个指针,而不是函数,指向函数的首地址

     返回值类型 (*指针变量名)(参数列表);

     函数指针的两种使用方式:

        1、 p();

        2、 (*p)();

    函数指针的主要用途:

      1、调用函数

      2、讲函数作为参数再函数间传递

     1 #include <stdio.h>
     2 
     3 
     4 
     5 //返回指针的函数
     6 /*
     7  1、返回指针的函数
     8  类型名 *函数名(参数列表);
     9  2、函数指针,指向函数地址的指针
    10  返回值类型 (*指针变量名)(参数列表);
    11     两种使用方式:
    12     1、 p();
    13     2、 (*p)();
    14  */
    15 
    16 char* pFunc();//指针函数
    17 int (*pf)(int ,int );//函数指针
    18 int Function(int ,int);//普通函数
    19 
    20 int main()
    21 {
    22     int a = 10;
    23     int b = 5;
    24     int c = 0;
    25    
    26     pf = &Function;//将函数指针指向具体的函数,这是pf就相当于函数本身,不过使用更灵活
    27     
    28     printf("%d
    ",pf(a,b));//第一种引用方式
    29     printf("%d
    ",(*pf)(a,b));//第二种引用方式
    30 
    31     char *addr = pFunc();//获取函数的返回值,是一个地址值
    32     printf("%s
    ",addr);//
    33     
    34     return 0;
    35 }
    36 
    37 //指针函数定义
    38 char* pFunc()
    39 {
    40     char *name = "song";
    41     return name;
    42 }
    43 
    44 int Function(int a,int b)//普通函数
    45 {
    46     return a+b;
    47 }

    2015-4-12 今日如此,明日依旧。

  • 相关阅读:
    姚班
    xxx
    1358B
    1368A
    莫烦Tensorflow 建造自己的NN
    莫烦Tensorflow 入门
    linux服务器安装Apache (Centos)
    C++ 获取Linux 服务器CPU占用率+内存空闲率(亲测绝对可以运行)
    MySQL主键从初始值自增
    基础练习 矩阵乘法
  • 原文地址:https://www.cnblogs.com/songliquan/p/4418210.html
Copyright © 2011-2022 走看看