1、 指针经典应用: 1. #include int main(void) char str=“hello world“; for(int i=0;i using namespace std; int main() char *str=“welcome“,“to“,“Fortemedia“,“Nanjing“; char*p=str+1; str0=(*p+)+2; str1=*(p+1); str2=p1+3; str3=p0+(str2str1); coutstr0endl; coutstr1endl; coutstr2endl; coutstr3endl; system(“pause“);
2、结果: Nanjing jing g /* str 的值就是数组的起始地址值,str 的值被默认解析成 char *变量的值。 char*p=str+1;str 指向的类型是 char *型的,所以 p 的值是(int)str+sizeof(char*),显 然 p 指向了 str 的第二个元素即 str1的地址。 (*p+)+2;,p 的值变为(int)p+sizeof(char*),显然此时 p 指向了 str2的地址,再进 行*运算,由于后置是+返回未变化的 p 的值,取到了 str1的值,即指向字符串“to“的指 针的值,由于*p 类型是 char*的所以(*p+)+2;最终 str0
3、指向了“to”结尾的/0所以输出 str0时为空。 str1=*(p+1);,显然 str1指向了字符串“Nanjing“的首地址。cout using namespace std; int main() int i2=1073741824,1073741824; int *p1= char *p2=(char*) float *p3=(float*) cout*p1n*p2n*p3endl; p1+; p2+; p3+; cout*p1n*p2n*p3endl; system(“pause“); /* 上述代码中指针变量 p1,p2,p3 指向相同的地址值,都是 i0所标识的内存的地址值,但
4、由 于指针的类型不同,导致用*运算符进行提领时,*p1,*p2,*p3 的值不一样。当 p1 用*提领 p1 所指向的内存里的数据时,由于 p1 是 int*型的,所以会从地址值为 void arrayTest(char str) cout sizeof(str) endl; int main(int argc, char* argv) char str110 = “I Love U“; arrayTest(str1); system(“pause“); 结果:4 /* (1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针; (2)很遗憾,在失去其内涵的同时,它还失去了
5、其常量特性,可以作自增、自减等操作, 可以被修改。 所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺, 成了一个地地道道的只拥有 4 个字节的平民。 */ 1.通过指针改变值: #include void main() int nNumber; int *pPointer; nNumber=15; pPointer= cout void AddFive(int* Number) *Number += 5; void main() int nMyNumber = 18; coutm_Number = 10; pPointerm_Character = s; delete
6、pPointer; 4.指向数组的指针 int *pArray; pArray = new int6; 或者: int *pArray; int MyArray6; pArray = /最后一行等价于:pArray = MyArray; 5.利用指针变量访问数组元素 #include void main() int size; double array = 5.5,4.3,5.2,6.2,7.5; double *p_array; p_array=array; size = sizeof(array)/sizeof(*array); for(int i=0;isize;i+) cout*(p_
7、array+i)endl; cout*(array+i)endl; coutarrayiendl; 6.二维数组表示 aij *(ai+j) *(*(a+i)+j) (*(a+i)j *( pi=/pi=a0 /pi=a;错误 int a34,(*p)4; p=a; 7.数组的结束标识符识别数组的长度 #include void sum(int *); void main() int a=10,20,30,40,50,NULL; int i=0; sum(a); while(ai!=NULL) coutai“ “; i+; void sum(int *p) int total=0; int i
8、=0; while(pi!=NULL) total+=pi; pi=0; i+; couttotalendl; 8.const 与指针 const int *pci; pci= *pci=55;/error! int *const cpi= *cpi=5; cpi=/error! const int *const cpc= cpc=/error! *cpc=44;/error! 9.字符串指针 #include void main() char *p=“Language“; cout=0;i) coutp; char *p=“fortran“; cout“p=“p; #include void
9、 main() int len=0; char a10,*p=a; cinp; while(*(p+len)!=0) len+; cout void main() int len=0; char a20,*p=a; cin.get(p,20); while(*(p+len)!=0) len+; coutpendl; coutlenendl; 10.引用 int a; int #include void swap(int *,int *); void main() int x=5,y=10; cout int void main() int a=1,3,5,7,9; coutf(2,a)endl; int return r; 11.数组指针 第 i 个元素地址的表示方法: 第 i 个元素的表示方法: ai,*(a+i),*(p+i),pi; *p+等价于*(p+)