高级声明(——C primer第13章)

高级声明:

(1) int *f,g;

这个只声明了一个f指针。*是都是紧跟在其后的。

(2) int *f();

f是一个函数,它的返回值是一个指向整型的指针。

(3) int  (*f)();

f是一个函数指针,这个函数的返回值是一个int类型。

(4) int *(*f)();

f是一个函数指针,这个函数的返回值是一个int*类型

(5) int f[];

f是一个整型数组,数组的长度暂时省略

(6) int *f[]

f是一个数组,数组的元素是指向整型的指针

(7)  int f()[]---这个声明时非法的

这里f是一个函数,他的返回值是一个整型数组,但这个声明是非法

的,因为函数不能返回数组,只能返回标量。

(8)  int f[]()---这个声明是非法的

这里f是一个数组,数组里是返回值为int的函数,这个声明是非法的

因为各个函数的不不具有相同的大小,而数组的元素需要相同的大小。

(9) int (*f[])();

这里f是一个数组,而数组的元素是函数的指针,而这些函数的返回值是

Int型

(10) int *(*f[])();

这里f是一个数组,而数组的元素是函数指针,而这些函数的返回值是int*型

前面都是旧式的风格

下面是新风格

          int (*f)(int,float);

这里将f声明为一个函数指针,它的参数为int和float,返回值为int型

          int *(*g[])(int,float);

这里将g声明为一个数组,数组的元素为函数指针,而函数的参数是int和float

返回值是int*的指针。

时间: 2024-11-11 03:27:48

高级声明(——C primer第13章)的相关文章

函数指针(——C primer 第13章)

函数指针: int  f(int);//声明一个函数 int  (*pf)(int)=&f;//创建一个函数指针,并将函数f的函数地址对它进行初始化. 其实函数名在被使用时,总是由编译器将它转化为指针.上面的那个&那个并非必要,只是显示 的说明编译器将隐式执行的任务. int ans; ans=f(25);//使用名字调用函数f,其实在执行时,函数名f被转化为函数指针,指向函数在内存中的地址. ans=(*pf)(25);//将函数指针转化为函数名,其实在执行时又转化回去了 ans=pf(

C++ Primer Plus 13章的疑问

1 void show(const Brass &rba) 2 { 3 rba.ViewAcct(); 4 cout<<endl; 5 } 6 7 void inadequate(Brass ba) 8 { 9 ba.ViewAcct(); 10 cout<<endl; 11 } 12 13 14 BrassPlus buzz("Buzz Parsec", 00001111, 4300); 15 16 show(buzz); 17 inadequate(

【C++ Primer 第13章】2. 拷贝控制和资源管理

拷贝控制和资源管理 • 类的行为像一个值.意味着它应该有自己的状态,当我们拷贝一个像值得对象时,副本和原对象是完全独立的,改变副本不会对原对象有任何影响. • 行为像指针的类则共享状态.当我们拷贝一个这种类的对象时,副本和原对象使用相同的底层数据,改变副本也会改变原对象. 13.2节练习 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 class HasPtr { 6 public: 7 HasP

《C++Primer》12、13章

第12章 动态内存 12.1 智能指针 shared_ptr<T> make_shared<T>(args) 直接初始化 new int(10); 默认初始化 new int; 值初始化 new int(); 由内置指针(而不是智能指针)管理的动态内存在被显示释放前一直都会存在. 最好坚持只使用智能指针: delete之后重置指针值为nullptr: unique_ptr u = nullptr 释放u指向的对象,将u置为空 u.release()  u放弃对指针的控制权,返回指针

C++ primer plus读书笔记——第13章 类继承

第13章 类继承 1. 如果购买厂商的C库,除非厂商提供库函数的源代码,否则您将无法根据自己的需求,对函数进行扩展或修改.但如果是类库,只要其提供了类方法的头文件和编译后的代码,仍可以使用库中的类派生出新的类.而且可以在不公开实现的情况下将自己的类分发给其他人,同时允许他们在类中添加新特性. 2. 派生类构造函数首先创建基类对象,如果不调用基类构造函数,程序将使用默认的基类构造函数. 3. 创建派生类对象时,程序首先调用基类构造函数,然后再调用派生类构造函数.派生类对象过期时,程序将首先调用派生

C++ Primer学习总结 第13章 拷贝控制

第13章 拷贝控制 1.    什么是拷贝构造函数? P440 如果一个类的构造函数的第一个参数是自己类类型的引用, 且所有其他参数都有默认值, 那么这就是一个拷贝构造函数. 2.    拷贝初始化和直接初始化.  P441 如果初始化的时候使用等号"="来初始化一个对象, 那么就是拷贝初始化. 相反, 如果初始化时, 没有用等号"=", 那么就是直接初始化. 如果是拷贝初始化, 那么用的一定是拷贝构造函数(也有可能用移动构造函数). 如果是直接初始化, 那么就用参

C和指针第13章第4题

题目:编写一个函数,它用于对一个任何类型的数组进行排序. 算法核心代码sort函数实现 /** 功能说明:sort函数可以对不同类型的数据进行排序 参数: 1.一个指向需要排序的数组的第一个值的指针. 2.数组中元素的个数. 3.每个数组元素的长度. 4.一个指向比较回调函数的指针 **/ void sort(void *array,int size,int element_size,int (*cmp)(void const *a,void const *b)) { char *pc = (c

《Cortex?-A系列编程者指南(V3.0)》第13章&lt;中断处理&gt;笔记

在本章,我们会看看ARM处理器处理中断的一系列方法,简单地看看通用中断控制器(Generic Interrupt Controller,GIC)架构. 旧版本的ARM架构允许实现者在他们的外部中断控制器设计中相当大的自由,没有关于中断类型或数量,或者是被用于中断控制模块接口的软件模型的协议.GIC架构提供一个更为严格的控制规范,使得来自不同制造商之间的中断控制器之间有更高程度的一致性.这使得中断处理代码变得更加可移植. 13.1 外部中断请求 如我们在第12章的异常类型中讨论的,所有的ARM处理

《javascript高级程序设计》第二、三章知识点整理

第二章知识点总结 1.<script>在html中的使用 主要功能:在页面中嵌入javascript代码或包含外部javascript文件. 常用属性: type:用于定义脚步代码的语言类型,默认为text/javascript. src:包含外部域的javascript文件. defer:表示脚本会在整个页面加载完毕之后运行,只对外部文件有效,最好只包含一个延迟脚本. async:脚本在不妨碍其他操作的情况下立即下载(不保证下载文件的顺序). 插入位置:在页面<body>标签页面