1、乘法运算符
2、定义指针
int
后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解:
int*
这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是int
在MS
3、何谓指针?
指针仅仅表示一个内存中的某个地址?
非也,注意到,我们在定义指针的时候,都关联了一个类型,如int,char,或者是string等等,如果说指针仅仅表示一个内存中的地址,那何必要关联这么多变化的东西呢?完全可以DWORD
关联了的数据类型是作何用的呢?
它可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。如
编译器可以从这个定义中获得信息:
1、p指向的内存存放的是整型数据,
2、由于该内存区域只存放了一个数据,跨越的内存区域为4个字节,即p+1的效果是跳过了四个字节。
另一个复杂一点的例子,如
struct
{int
short
a
}
定义指针
1、p指向的内存区域依次存放了三种类型的数据,分别是int,short和一个指针型数据。
2、p指向的内存区域跨越了12个字节,即p+1的效果是跳过了12个字节。(为何不是10?对齐的原因)
但是,C++中定义了一种特殊的指针,它去除了一般指针中对内存区域内容以及大小的解释,以满足特定的需要,如我们只需要某块内存的首地址,不需要考虑其中的数据类型以及大小。这种形式为
4、关于const修饰符
当const遇到指针,麻烦事就来了,
看:const
这三个表达式,
第一个表示p是一个指针,p本身平凡无比,但是p所指向的对象是一个特殊的对象--整型常量;
第二个表示:这个p指针不是一个普通的指针,它是个常量指针,即只能对其初始化,而不能赋值,另外,这个指针所指向的对象是一平凡的int型变量;
第三个则结合了前两者:指针和指向的对象都非同寻常,都是常量。
有了const,赋值的问题就变得麻烦起来,
首先,对于