- 浏览: 357753 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
tianshawang:
楼主你好偏心啊,把代码给谷歌不给这里
java 实现windows资源管理器 -
tianshawang:
其实我是也想要资源管理器的代码来的。。
java 实现windows资源管理器 -
hcmfys:
lonuery 写道open file 是获取要进行复制的文件 ...
JAVA 复制 带进度条 时间 百分比 -
qq657052171:
怎么没有代码呢?
java 实现windows资源管理器 -
IT女民工:
楼主,求资源管理器代码~~~~
java 实现windows资源管理器
首先要说明的是,在C语言中,()、[]运算符的优先级别要高于*指针运算符。
因此,下面基于运算符优先级来讨论一下C语言中指针用法里很容易混淆的几种情况:
int *p;//p为指向整型数据的指针变量
int *p[4];//p为一个指针数组,里面有4个元素,每个元素都是一个指向整型变量的指针。因为[]运算符的优先级别高,因此p首先与[4]结合,也就是说p是一个数组名,接下来再看该数组中的元素究竟是什么,从前面的int *可以看出数组中的元素是指向整型变量的指针。
int (*p)[4];//p是一个指针,它指向的是一个含有4个整型元素的数组。因为()运算符优先级别高,因此p先与*结合,这样就确定了p肯定是一个指针,接下来的工作就是看看究竟p这个指针指向什么,抛开(*p)不看,假如是int a[4]的话,那大家都会知道这个数组a是一个包含4个整型变量元素的一维数组,因此指针p就是指向这样一个数组——包含4个整型元素的数组。
int *p();//p是一个函数名称,该函数没有任何参数,该函数返回一个指针,该指针指向一个整型变量。同样,先从优先级来分析,因为()的优先级别高,因此p首先与()结合成p(),因此p就是一个函数名字,接下来再看该函数的一些特性,比如参数以及返回值之类的东西。
int (*p)();//p是一个指针,该指针指向一个函数,该函数没有参数,且返回一个整型变量。利用优先级来分析,p先与*结合,因此就能够首先确定出p是一个指针了,下面再看该指针指向什么东西,就像分析int (*p)[4]一样,抛开(*p)不看,如果是int fun()的话,就能够知道这是一个不带参数且返回整型变量的函数,因此指针p就是指向这样一个函数。
好了,有了上面的分析,相信大家对指针里这几个比较容易混淆的用法必然很清楚了,当然在指针的使用中还有指向指针的指针,比如int **p;以及指向多维数组的多重指针,但是相信有了以上基础之后,只要认真分析,肯定就能把问题迎刃而解了吧?
下面就来看一个稍微复杂些的指针方面的应用:
int (*p(char op))(int, int);
不知道大家是否可以看懂上面这一行中定义的东西,你能告诉我p是什么吗?呵呵,我先把谜底给大家,让大家一睹为快,p是一个函数名字。下面就来分析一下:
根据优先级来看p会首先与(char op)结合,因此p必定是一个函数名字,由p来表征的这个函数只含有一个字符型的参数op,并且该函数返回一个指针,如果是
int *p(char op)的话,大家都会很清楚的知道该函数会返回一个指针,且该指针会指向一个整型变量,但是对于int (*p(char op))(int, int);而言,p表征的这个函数肯定会返回一个指针,那么该指针到底会指向什么东西呢?呵呵,如果给你int (指针哈哈)(int,int),你肯定也会知道“指针哈哈”是指向一个函数的,该函数还有两个整型参数,且返回一个整型值,那么好了,知道了这一点就应该能够知道这里的p表示的真正含义了吧:p为一个函数名字,该函数带有一个char型参数,且返回一个指向函数的指针,该指针指向的函数包含两个整型参数、返回一个整型变量。哈哈,看懂没?
因此,下面基于运算符优先级来讨论一下C语言中指针用法里很容易混淆的几种情况:
int *p;//p为指向整型数据的指针变量
int *p[4];//p为一个指针数组,里面有4个元素,每个元素都是一个指向整型变量的指针。因为[]运算符的优先级别高,因此p首先与[4]结合,也就是说p是一个数组名,接下来再看该数组中的元素究竟是什么,从前面的int *可以看出数组中的元素是指向整型变量的指针。
int (*p)[4];//p是一个指针,它指向的是一个含有4个整型元素的数组。因为()运算符优先级别高,因此p先与*结合,这样就确定了p肯定是一个指针,接下来的工作就是看看究竟p这个指针指向什么,抛开(*p)不看,假如是int a[4]的话,那大家都会知道这个数组a是一个包含4个整型变量元素的一维数组,因此指针p就是指向这样一个数组——包含4个整型元素的数组。
int *p();//p是一个函数名称,该函数没有任何参数,该函数返回一个指针,该指针指向一个整型变量。同样,先从优先级来分析,因为()的优先级别高,因此p首先与()结合成p(),因此p就是一个函数名字,接下来再看该函数的一些特性,比如参数以及返回值之类的东西。
int (*p)();//p是一个指针,该指针指向一个函数,该函数没有参数,且返回一个整型变量。利用优先级来分析,p先与*结合,因此就能够首先确定出p是一个指针了,下面再看该指针指向什么东西,就像分析int (*p)[4]一样,抛开(*p)不看,如果是int fun()的话,就能够知道这是一个不带参数且返回整型变量的函数,因此指针p就是指向这样一个函数。
好了,有了上面的分析,相信大家对指针里这几个比较容易混淆的用法必然很清楚了,当然在指针的使用中还有指向指针的指针,比如int **p;以及指向多维数组的多重指针,但是相信有了以上基础之后,只要认真分析,肯定就能把问题迎刃而解了吧?
下面就来看一个稍微复杂些的指针方面的应用:
int (*p(char op))(int, int);
不知道大家是否可以看懂上面这一行中定义的东西,你能告诉我p是什么吗?呵呵,我先把谜底给大家,让大家一睹为快,p是一个函数名字。下面就来分析一下:
根据优先级来看p会首先与(char op)结合,因此p必定是一个函数名字,由p来表征的这个函数只含有一个字符型的参数op,并且该函数返回一个指针,如果是
int *p(char op)的话,大家都会很清楚的知道该函数会返回一个指针,且该指针会指向一个整型变量,但是对于int (*p(char op))(int, int);而言,p表征的这个函数肯定会返回一个指针,那么该指针到底会指向什么东西呢?呵呵,如果给你int (指针哈哈)(int,int),你肯定也会知道“指针哈哈”是指向一个函数的,该函数还有两个整型参数,且返回一个整型值,那么好了,知道了这一点就应该能够知道这里的p表示的真正含义了吧:p为一个函数名字,该函数带有一个char型参数,且返回一个指向函数的指针,该指针指向的函数包含两个整型参数、返回一个整型变量。哈哈,看懂没?
通常情况下,如果遇到类似问题时,我们不会把问题一次性搞得如此复杂,而是会拆解开来,一般都是先用typedef定义一个指向函数的指针,再用它定义好的这个东东去再定义一个函数,这个函数的返回值就是我们用typedef定义的那个东东哟,呵呵,请看下面的示例:
// 定义指向这类函数的指针
typedef int (*FP_CALC)(int, int);
FP_CALC s_calc_func(char op);//声明一个函数
其实,上面的两行就相当于下面的这一行啊:
int (*s_calc_func(char op))(int, int);//完成同样的功能——声明一个函数
但是如果我们不是来声明一个函数,而是来定义一个指向函数的指针变量时,
如果不用typedef的方式,那么将会是如下的样子:
int (*s_fp)(int, int);
这多少让大家不太容易接受,因为我们熟知并常见的定义变量的方式是:类型 变量名,如int a;
而上面这种方式定义变量,看似有点像函数声明了,呵呵,因此在使用到指向函数的指针时,通常都先采用typedef的方法来声明一个指向函数的指针,然后就可以用“类型 变量名”这种方式来定义了:
typedef int (*FP_CALC)(int, int);
FP_CALC s_fp;//这多好看呀,看得舒服吧?
如果不用typedef的方式,那么将会是如下的样子:
int (*s_fp)(int, int);
这多少让大家不太容易接受,因为我们熟知并常见的定义变量的方式是:类型 变量名,如int a;
而上面这种方式定义变量,看似有点像函数声明了,呵呵,因此在使用到指向函数的指针时,通常都先采用typedef的方法来声明一个指向函数的指针,然后就可以用“类型 变量名”这种方式来定义了:
typedef int (*FP_CALC)(int, int);
FP_CALC s_fp;//这多好看呀,看得舒服吧?
下面再给出一个完整的引用,有兴趣的读者可以仔细研究研究,真的很有趣味:
-----------------------------------------------------------------------------------
typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?
typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?
int (*s_calc_func(char op))(int, int);
如果不知道,请看下面的程序,里面有比较详细的说明
// 定义四个函数
int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);
// 定义指向这类函数的指针
typedef int (*FP_CALC)(int, int);
// 我先不介绍,大家能看懂下一行的内容吗?
int (*s_calc_func(char op))(int, int);
// 下一行的内容与上一行完全相同,
// 定义一个函数calc_func,它根据操作字符 op 返回指向相应的计算函数的指针
FP_CALC calc_func(char op);
// 根据 op 返回相应的计算结果值
int calc(int a, int b, char op);
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return b? a/b : -1;
}
// 这个函数的用途与下一个函数作业和调用方式的完全相同,
// 参数为op,而不是最后的两个整形
int (*s_calc_func(char op)) (int, int)
{
return calc_func(op);
}
FP_CALC calc_func(char op)
{
switch (op)
{
case '+': return add;
case '-': return sub;
case '*': return mul;
case '/': return div;
default:
return NULL;
}
return NULL;
}
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op); // 下面是类似的直接定义指向函数指针变量
// 下面这行是不用typedef,来实现指向函数的指针的例子,麻烦!
int (*s_fp)(int, int) = s_calc_func(op);
// ASSERT(fp == s_fp); // 可以断言这俩是相等的
if (fp) return fp(a, b);
else return -1;
}
void test_fun()
{
int a = 100, b = 20;
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));
printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));
}
运行结果
calc(100, 20, +) = 120
calc(100, 20, -) = 80
calc(100, 20, *) = 2000
calc(100, 20, /) = 5
发表评论
-
#ocx 格式转换
2013-06-14 14:31 1041#include<iostream> # ... -
c 创建文件夹
2011-03-02 18:45 1435写道 int create_new_dir(char* ... -
VC之CString,wchar_t,int,string,char*之间的转换方法
2010-09-18 20:11 67001. CString 转 wchar_t CString p ... -
c++ odbc
2010-03-29 16:28 1784#include<windows.h> #inc ... -
vc socket编程
2010-03-16 16:38 23141.TCP服务器端: #include <Winsoc ... -
json ajax
2008-06-27 15:37 957版权所有,转载请注明,来自http://www.jialing ... -
存储过程实现分页 (载至网上) ——~——
2008-07-09 09:33 1138存储过程实现分页 -------------------- ... -
JMAIL发邮件的时候,接收到的邮件标题全是乱码
2008-07-18 12:18 1662天在做JMAIL发邮件的时候,接收到的邮件标题全是乱码,经在B ... -
UTF-8编码
2008-08-14 11:11 853一、操作系统 window系统 ... -
字符与编码
2008-10-30 09:21 1202乱码-我们心中的痛! ... -
c++ BOOKS
2008-11-10 11:11 8431.C++ Primer 中文版(第四版) 2. ... -
c study_13
2009-04-08 22:54 741第十章:文件 文件文件的基本概念 所谓"文 ... -
c_study_01
2009-04-08 22:57 676编译错误信息 说明:Turbo C 的源程序错误分为三种类型 ... -
c_study_02
2009-04-08 22:58 687附录二:Turbo C(V2.0)使用 ... -
c_study_03
2009-04-08 22:59 712c语言的编程风格- - ... -
c_study_04
2009-04-08 23:00 924第二章: 数据类型、运 ... -
c_study_05
2009-04-08 23:01 755第三章: C语言程序设 ... -
c_study_06
2009-04-08 23:03 634第四章: 数组- - ... -
c_study_07
2009-04-08 23:04 771第五章:函数- - ... -
c_study_09
2009-04-08 23:05 658第六章:指针- - ...
相关推荐
根据提供的信息,我们可以推断出这是一本关于C语言编程的经典书籍,特别是针对指针这一概念进行了详尽的解释。接下来我们将围绕“指针”这一主题进行深入探讨,并结合C语言的学习过程,来阐述该书可能涉及的重要知识...
### 指针经典问题解析 #### 指针的概念及分类 指针是一种特殊的数据类型,用于存储内存地址。理解指针对于编程至关重要,尤其是对于C/C++这样的语言而言。掌握指针需要理解以下几个方面: 1. **指针的类型**:指...
根据提供的文件信息,标题与描述均为“C++指针方面的心得”,这表明文章将主要围绕C++语言中的指针概念及其使用技巧进行探讨。由于标签部分与内容并不相关,因此我们将忽略这部分信息,直接从标题和描述中提取并展开...
以智能指针的面试题线索,穿插讲解完最常用的四种智能指针的各个方面。本文讲解4个智能指针的基本概念和特性,以及其他设计到的知识点。讲解的过程中,如果此部分内容涉及到面试题目,会在旁边以这个题目的序号来...
在C和C++编程语言中,指针是一个至关重要的概念,它...通过不断的实践和学习,可以熟练运用指针解决各种复杂问题,提升编程效率。这份总结涵盖了指针的基础和进阶知识,对初学者和有经验的开发者来说都是宝贵的资源。
内容概要:文章内容从原子性、可见性、有序性三个方面介绍C++线程安全问题的原因。通过原子操作、线程同步如互斥锁、读写锁、条件变量、信号量等方法解决C++线程安全问题。同时介绍了线程安全的单例,饿汉模式和懒汉...
c语言,有关指针应用问题,讲解的很仔细,透彻!
因此,指针具有以下四个关键方面: 1. **指针的类型**:指针的类型决定了指针变量可以指向哪种类型的内存区域。例如,`int*ptr`声明了一个指向整型变量的指针,其类型是`int*`。在例一中,还展示了不同类型的指针...
在IT领域,用户界面(UI)的个性化是提升用户体验的重要一环,而鼠标指针作为电脑操作中的一个重要元素,其设计和风格也能显著影响到用户的交互感受...同时,了解如何自定义鼠标指针也是提升计算机使用技巧的一个方面。
本篇文章将深入探讨C语言指针的各个方面。 首先,我们需要了解指针的声明方式。在声明指针时,我们会指定指针所指向的数据类型。例如: 1. `int *p;` 这里,`p`是一个指针,它指向一个`int`类型的变量。`*`表示...
虽然Vista系统原版的鼠标指针已经过优化,但第三方或自定义指针可能会导致一些软件或游戏运行不顺畅,因为它们可能没有考虑到所有可能的指针形状和动画。因此,在享受个性化的同时,确保系统的稳定性和兼容性也是很...
本文旨在深入解析指针的概念,并通过具体的例子帮助读者更好地掌握指针的四个关键方面:指针的类型、指针所指向的类型、指针的值以及指针本身所占据的内存区。 #### 二、指针的类型 指针的类型指的是指针本身的...
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。 首先,让我们来了解指针的类型。指针的类型是指针本身所具有的类型。...
这些文件名可能是以冒险岛游戏中的物品、场景或角色为灵感的鼠标指针,如789可能代表数字或计数元素,book可能是书本或魔法书的图像,water可能与水元素或水域有关,ear可能是角色的耳朵或听力相关的游戏元素,cute...
要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。 Declaring Pointers 声明指针需要使用指针声明符*,例如: int *p; //...
桌面优化并不仅仅局限于鼠标指针,还包括壁纸、屏保、快捷方式布局等多方面。通过合理搭配和个性化设置,可以使工作环境更加舒适,提升工作效率。马里奥主题的鼠标指针可以作为一个亮点,配合相应的壁纸或者主题元素...
指针是C语言的精华,然而,很多人学习了 C 基础知识却始终对 C 指针不得要领,长期被 C 指针困扰,所以给大家推荐此书,本书作者运用了许多生动与亲切的例子,深入浅出地讲透了 C指针的原理与机制,并辅以编程实践中...
《C指针与陷阱》是一本深入探讨C语言中指针使用技巧与常见问题的经典书籍。在C语言中,指针是其核心特性之一,它赋予了程序员直接操控内存的能力,但同时也带来了许多潜在的陷阱。这篇内容我们将深入讨论C语言中的...
在这个主题中,我们将深入探讨指针的高级应用,特别是与虚函数相关的知识,以及如何进行强制类型转换。通过理解和掌握这些知识点,你的C++技能将得到显著提升。 首先,让我们来看看“虚函数”。虚函数是C++中的一个...