摘要:
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。
我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。
需要强调一下的是,复杂的C/C++声明并不是好的编程风格;我这里仅仅是教你如何去理解这些声明。注意:为了保证能够在同一行上显示代码和相关注释,本文最好在至少1024x768分辨率的显示器上阅读。 阅读全文
摘要:
我想求教一个问题:
: c语言中FLOAT 是如何表示的?尾数,阶码是如何在32位上安排的,即哪几位是
: 尾数,哪几位是阶码,那一位是符号位。听说与CPU有关,是真的吗? 阅读全文
摘要:
c++比起c来除了多了类类型外还多出一种类型:引用。这个东西变量不象变
量,指针不象指针,我以前对它不太懂,看程序时碰到引用都稀里糊涂蒙过去。
最近把引用好好地揣摩了一番,小有收获,特公之于社区,让初学者们共享。
引用指的是对一个对象的引用。那么什么是对象?在c++中狭义的对象指的是
用类,结构,联合等复杂数据类型来声明的变量,如 MyClass myclass,CDialo
g mydlg,等等。广义的对象还包括用int,char,float等简单类型声明的变量
,如int a,char b等等。我在下文提到“对象”一词全指的是广义的对象。c++
的初学者们把这个广义对象的概念建立起来,对看参考书是很有帮助的,因为大
多数书上只顾用“对象”这个词,对于这个词还有广义和狭义两种概念却只字不
提。 阅读全文
摘要:
看下面的例子:
例十七:
char s='a';
int *ptr;
ptr=(int*)&s;
*ptr=1298;
指针ptr是一个int*类型的指针,它指向的类型是int。它指向的地址就是s的 阅读全文
摘要:
当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋
值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指
针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向
的类型是一样的。 阅读全文
摘要:
可以把一个指针声明成为一个指向函数的指针。
int fun1(char*,int);
int (*pfun1)(char*,int);
pfun1=fun1;
....
....
int a=(*pfun1)("abcdefg",7);//通过函数指针调用函数。
可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为
实参。
例十三:
int fun(char*);
int a;
char str[]="abcdefghijklmn";
a=fun(str);
...
...
int fun(char*s)
{
int num=0;
for(int i=0;istrlen(s);i++ 阅读全文
摘要:
可以声明一个指向结构类型对象的指针。
例十一:
struct MyStruct
{
int a;
int b;
int c;
}
MyStruct ss={20,30,40};//声明了结构对象ss,并把ss的三个成员初始
化为20,30和40。
MyStruct *ptr=&ss;//声明了一个指向结构对象ss的指针。它的类型是
MyStruct*,它指向的类型是MyStruct。
int *pstr=(int*)&ss;//声明了一个指向结构对象ss的指针。但是它的
类型和它指向的类型和ptr是不同的。 阅读全文
摘要:
如果对声明数组的语句不太明白的话,请参阅我前段时间贴出的文章。
数组的数组名其实可以看作一个指针。 阅读全文
摘要:
一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。
下面是一些指针表达式的例子:
例六:
int a,b;
int array[10];
int *pa;
pa=&a;//&a是一个指针表达式。
int **ptr=&pa;//&pa也是一个指针表达式。
*ptr=&b;//*ptr和&b都是指针表达式。
pa=array;
pa++;//这也是指针表达式。 阅读全文
摘要:
这里&是取地址运算符,*是...书上叫做“间接运算符”。
&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型
是a的类型,指针所指向的地址嘛,那就是a的地址。
*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这
些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。 阅读全文
摘要:
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减
运算的意义是不一样的。例如:
例二:
1。 char a[20];
2。 int *ptr=a;
...
...
3。 ptr++; 阅读全文
摘要:
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的
类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让
我们分别说明。 阅读全文