zoukankan      html  css  js  c++  java
  • 指针数组、数组指针、指针函数、函数指针的简单介绍

    一.指针数组:本质是一个数组,里面存放的元素是指针。例如:char *nums[10];定义了一个名称为num 长度为10的存放元素为:指向char类型数据的指针变量的数组。数组中的每个元素都是一个指针,每个指针都可以指向一个字符串。

     

    在程序中举例:

    int main(int argc, const char * argv[]) {

       // 指针数组就是用来表示字符串的数组

       char *strs[10];

       // 声明了一个数组, 允许存储 10 个字符串

       // 每一个字符串

       strs[0] = "1234";

       strs[1] = "你好";

       // ...

       strs[9] = "hello iOS";

       return 0;

    }

    指针数组和二维数组的区别:

    1.    二维数组赋值必须使用for循环或者strcpy()函数进行赋值,而指针数组可以直接赋值。如;arr1[]=”qazwsx”;

    2.    二维数组赋值之后可以更改,但是指针数组赋值之后不能更改。

    数组指针:本质是一个指针,指向一个数组的指针变量(变量中存放的地址就数组的地址。)

    3.    数组的长度一旦定义后就确定,分配的内存也被确定不可修改。如果字符串分配到数组之后长度太小就会浪费空间,如果太大,字符串就盛不下,但是指针不会。如下图:


    二.数组指针:本质是一个指针,指向一个规定长度的数组。

    定义:如 int (*p)[10]; 

     int 指的是指针指向的数组的元素的类型。(*p)指的是定义一个名称是p的指针变量名。[10]指的是指针指向的数组的长度。此时定义了一个指针变量 p, 该变量指向一个长度为 10 的元素为 int 类型的数组。

    例如:

    int main(int argc, const char * argv[])

    {

        int(*p)[10]="1 2 3 4 5 6 7 8 9 0";

    printf("%s",*p);

    return 0;

    }

     

    拓展:int *(*p)[10]。指的是定义了一个指针型变量p,指向一个长度为10存放指针类型元素的数据。

     

     

     

     

     

     

     

     

    三.指针函数:本质是一个函数。返回值为指针。

    Int *function(参数)

    {

    …………

    }

    对于这种函数,一定要慎用,举个例子,给出一段同事之前出现错误的代码:

    int *func() {

        intarr[] = {1,2,3,4};

    return arr;


     

    }//这是很危险的做法,在这里开辟的函数存在栈里面,函数结束后内存收回。很容易出 bug。除非手动开辟内存,或者开发者对当前内存分布情况比较深入。

     

     

    四.函数指针:本质上是一个指针。指向函数的指针,也就是说该指针变量存放的是函数的地址。

    核心意义:使用一个变量存储一个函数,然后利用变量调用函数

    语法:

    例如定义一个有两个参数,一个int返回值的函数:int strcmp(char *, char *)。定义它的函数指针:int (*p)(char*, char *);只需要将函数名称去掉换上(*p)就可以了。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    26个新鲜有魅力的自适应网站设计实例
    计划——Redis
    Go语言工具go get的一点问题
    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼
    策略模式
    在Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种:
    Spring 中 用 ${xxx} 读取properties文件的说明
    Spring中属性文件properties的读取与使用
    通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
    设置xml以让通知spring 扫描 注解
  • 原文地址:https://www.cnblogs.com/wahy/p/4817256.html
Copyright © 2011-2022 走看看