指针变量也有加减运算。指针可以加减某个整型数,指针与指针可以相减,但指针与指针相加是没有意义的。另外,指针的乘除也没有意义。指针的值是一个内存地址,而一个内存地址可以用一个整型数表示,因此指针的运算可以看做整型数间的运算。不过,指针运算有其特殊性。如果某个数据占据多个字节,那么该数据的指针只能指向其起始地址,即第一个字节的地址,指向中间某个字节是没有意义的。可以使用“*( p + 1)”、“*( p – 2)”等求得指针移动后指向的数据
指针与指针相减表示两个指针间可以存储的变量的个数。假设两个 short 型指针 p 和 q 所指的地址分别是 1000和 996,则 p-q 的值就是 2,即两个 short 型变量。
Int arr[10];
Int *p;
P=&arr[0];
P=arr//与上者一样 都是只想数组首地址 但是注意没哟&因为数组名就是首地址
要访问第i+1个元素 可以用*(p+i) 也可以用arr[i] 或者*(arr+i)
char* pstr = "Hello World";// 定义一个字符串指针 这种定义方法从表面上看好像违背了指针的概念:指针就是一个指向地址的变量,在这个地址
还没有确定的时候( "Hello World" 是不知道的),不能给这个地址里面赋值。但其实这种写法是正确的,原因是在 C++中这是一种特殊的情况,这个字符串“Hello World!”被定义在 C++的常量存储区中,指针 pstr 是一个指向常量存储区中一块内存的 指针常量存储区的内容是不可以修改的,因此对于上面定义的字符串 pstr,不可以修改其内容。
在对字符串进行赋值的时候,很容易犯一个错误——直接给字符串的指针赋值。
charbuffer[16];
char* p = buffer;
p ="Hello World";
在上述程序中目的是要把字符串“Hello World”存储在数组 buffer 中,但实
际的运行效果却不是这样的。在赋值前,字符指针指向数组的首地址 在赋值后,字符指针指向字符串所在内存地址。而没有达到修改 buffer 的目的。
正确的做法是使用 C++的库函数 strcpy,进行字符串复制:
strcpy(p, "Hello World" );
shmily_h