int i;    //定义整型变量i

int *p;    //定义一个指向int的指针变量p

int a[5];   //定义一个int数组a

int *p[5];  //定义一个指针数组,其中每个数组元素指向一个int型变量的地址

int (*p)[5];  //定义一个指向int[5]类型的指针变量

int func();   //定义一个函数func,返回类型为int

int *func();    //定义一个函数,返回类型为int*

int (*p)();    //定义一个指向函数的指针,返回类型为int

int **p;     //定义一个指向int的指针的指针,二级指针

a[1]+2 = *(a+1)+2 = &a[1][2]     //第一行第二列元素地址

*(a[1]+2) = *(*(a+1)+2) = a[1][2] // 第一行第二列元素的值

多级指针

int a;

int *p = &a;    //指向整型变量a的指针,通过*p访问a

int **pp = &p;   //指向int型指针p的指针,通过**pp访问a,通过*pp访问p

int ***ppp = &pp;   //指向int **pp的指针,通过***ppp访问a

函数作为参数

1.不用typedef

int *func1(int n)      ///定义一个函数,返回类型为int*
{   printf("%d",n); } int *func2(int *(*p)(int ),int n) {   return p(n); } int main {   int a = 1;   int *p = func2(func1,a);   return 0; }

2.使用typedef

int *func1(int n)      ///定义一个函数,返回类型为int*
{ printf("%d",n); } typedef int *(*P_INT)(int); //定义P_INT是指向int *函数形参为int的函数的指针 ,即为指向func1函数的指针 int *func2(P_INT p,int n) {   return p(n); } int main {   int a = 1;   int *p = func2(func1,a);   return 0; }

  

进阶:定义一个函数的数组

int *func1(int n)      ///定义一个函数,返回类型为int*
{ printf("%d",n); } typedef int *(*P_INT)(int); //定义P_INT是指向int *函数形参为int的函数的指针 ,即为指向func1函数的指针 int *func2(P_INT p,int n) {   return p(n); } int main {   int a = 1;   int *p = func2(func1,a); P_INT arr[5];//原始定义 int *(*p[5])(int);
//这是一个数组,一共5个成员,每个成员都是指向int *函数形参为int的函数的指针   return 0; }

  typedef进阶:

上面的代码中int *func1(int n)作为一个函数的返回值

P_INT func3()
{
  return func1;
}

C的指针和数组的更多相关文章

  1. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  2. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  3. 指针与数组的区别 —— 《C语言深度剖析》读书心得

    原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...

  4. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  5. 指针 与 数组 以及 a 与 &a的区别

      指针 与数组 并没有什么关系,   指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到;   数组 ...

  6. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  7. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  8. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  9. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  10. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

随机推荐

  1. Java-排序算法-冒泡排序

    一.冒泡排序的原理 冒泡排序,就是从第一个元素开始,通过两两交换,使小的先冒出来,然后再走第二轮使次小的冒出来,直到最后一轮最大的冒出来,排序完成 二.冒泡排序的伪代码实现: bubblesort(A ...

  2. 宝塔Linux面板 概述

    安装要求: Python版本: 2.6/2.7(安装宝塔时会自动安装) 内存:128M以上,推荐512M以上(纯面板约占系统10M内存) 硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间) 系 ...

  3. 关于Laravel框架

    第1讲-Laravel介绍 1.1 什么是Laravel laravel是目前一个比较主流的框架,现在很多互联网的公司都在使用该框架.该框架的前身是symfony框架 Laravel的定位就是做一个简 ...

  4. linux高级编程——IO

    1,文件IO 1)open——打开或创建一个文件 open(char *,flag,mode)在fcntl.h文件中声明. 参数: char * 包含有文件名和路径 flag 打开文件方式 mode ...

  5. .Net连接字符串设置连接池大小显著提高数据库速度

    在访问mysql数据库时,如果在连接字符串中设置使用连接池,同时设置连接池大小,经测试,可以显著提高访问数据库时的速度. 连接字符串: connectionStrings>    <add ...

  6. Vue 快速原型开发

    快速原型开发 注意: 是:serve 而不是 server 通过使用 vue serve 和 vue build 命令对单个 *.vue 文件进行快速原型开发,不过这需要先额外安装一个全局的扩展 go ...

  7. java基础之—类加载器

    要了解类加载器先要了解类的加载 一.类的加载(类的加载概述) 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.加载 就是指将clas ...

  8. String 练习

    package com.hanqi; import java.util.Random; public class Text { public static void main(String[] arg ...

  9. iOS.AutoLayout.2.CustomView-with-AutoLayout

    Custom View Which Support AutoLayout 创建支持AutoLayout的Custom View AutoLayout 通过使view更加的自组织来减轻controlle ...

  10. There are stopped jobs

    问题背景 系统:ubuntu,当输入exit退出shell时,出现There are stopped jobs 无法退出shell 解决办法 找到这个stopped job然后终止它 jobs 或者 ...