C的指针和数组
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的指针和数组的更多相关文章
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- 11-C语言指针&一维数组&字符串
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...
- 指针与数组的区别 —— 《C语言深度剖析》读书心得
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 指针 与 数组 以及 a 与 &a的区别
指针 与数组 并没有什么关系, 指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到; 数组 ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- C语言指针与数组的定义与声明易错分析
部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...
随机推荐
- require模块化载入
1,模块化require的载入步骤 1,一个总文件夹,,里面三个子文件夹 ,, 分别是 2,common 里面是放一些公共方法和自己封装的方法 js里面是放自己的业务逻辑js文件和一些模块化的 ...
- C++ 单例模式(懒汉、饿汉模式)
1.简单的单例模式实现 2.C++的构造函数不是线程安全的,所以上述代码在多线程的情况下是不安全的,原因是new Singelton时,这句话不是原子的,比如一个线程执行了new的同时,另一个线程对i ...
- [leetcode]122. Best Time to Buy and Sell Stock II 最佳炒股时机之二
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- day 11 生成器
生成器生成器本质就是迭代器,生成器是自己用python代码写的迭代器 将函数变成生成器yield用next 取值一个next,对应一个yield def func(): yield 111 yield ...
- Win7 64位VC6调试无法退出
错误信息:LINK: fatal error LNK1168: cannot open Debug/test1.exe for writing 根据网络上查询,找到最终原因,DM.dll,TLLOC. ...
- python re正则
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 r ...
- Vim完全教程
一.简介 世界上只有三种编辑器,EMACS.VIM和其它. 我们所处的时代是非常幸运的,有越来越多的编辑器,相对于古老的VIM和EMACS,它们被称为现代编辑器.我们来看看这两个古董有多大年纪了: ...
- Liunx read
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据 ...
- Andriod ----配置环境变量
注意:跟java相关的目录不要有中文和空格. 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:D:\Java ...
- linux系统中的进程状态分析
转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...