码迷,mamicode.com
首页 > 编程语言 > 详细

c++之路起航——指针

时间:2015-12-19 07:43:30      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

c++一阶指针

定义

       存储类型名 数据类型 * 指针变量名;

      Eg:int *a;//定义了一个指向整型的指针 a;

指针使用方法

      int a,*b;

        b=&a;//表明将a的地址赋值给b;

        *b=5; //将b指针所指向的地址赋值给5;即等同于a=5;

指针使用前必须赋一个合法的值
       int *a,b;
         *a=5;//这种表达方式是错误的,因为没有对a进行初始化,而就进行赋值。
void *a//万能指针,可以接受任何类型的指针,
     int *a;
     void *b;
     char *c;
        b=a;//正确,因为void指针可以接受任何类型的指针
        a=b;//错误,因为void指针不能直接赋值给其他类型指针 正确写法应为a=(int *)b;将b强制类型转换为整形指针,在复制;
        c=(char *)b;//正确; 
二阶指针//二阶指针,顾名思义,既为指向指针的指针;
       定义:存储类型 数据类型 ** 指针变量名
         Eg  int **p;//二阶指针
               
#include<iostream>
Using namespace std;
int main(){
int i,*q,**p;
  i=123,q=&i,p=&q;//简单解释一下二阶指针,
cout<<**p;
return 0;
}
指针函数传值
     
void swap(int *x,int *y){}
int main()
{int a,b,*p=&a,*q=&b;
swap(p,q);
swap(&a,&b);
 指针数组与数组指针
      指针数组
             int *p[10];//定义了一个指针类型的数组,数组中每一个元素都为一个指针类型;
      数组指针
             int(*p)[10];// 定义了一个指向数组的指针;         
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[2][5]={1,2,3,4,5,6,7,8,9,0};
int (*p)[5]=a;
cout<<"*p[1]="<<*p[1]<<endl;
cout<<"*(p[1]+1)="<<*(p[1]+1)<<endl;
char *q[5]={"a","b","c","d","e"};//指针数组这样初始化dev会有警告,但vc不会有任何警告;不建议读者用这种初始化。
cout<<"q[1]="<<q[1]<<endl;//因为q[10]为指针类型数组,所以q中存储的为地址。
return 0;
}
 指针函数与函数指针
     指针函数//返回值为指针的函数;
   定义:类型名 * 函数名(参数列表);
Eg:int * max(int *x,int *y);
  {
      returen *x>*y?x:y;
   }
    函数指针//算法竞赛中基本不用,只顺便提一下,既为指向函数的指针;
           定义:函数类型 (*指针名) (函数形参表);
           Eg
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int main()
{ int a=1,b=2;
int (*p)(int,int);
p=max; cout<<p(a,b);//也可以写成(*p)(a,b),其中*运算没有意义
p=min; cout<<p(a,b);
return 0;  
指针与数组
    c++中数组名既为一个地址;故可以赋值给指针变量;
      Eg
          int a[10];*p;
          p=a;//正确;
        二维数组—特殊的二阶指针;
            int b[10][10];
            将二维数组理解为矩阵;
            b为二阶指针;
               b所指位置为行,称为行指针;
               对b进行一次*运算,便转换为列指针,从而确定每一个元素所在位置。
             int a[10][10],**b;
                  b=a;//这种方式是错误的。
 

c++之路起航——指针

标签:

原文地址:http://www.cnblogs.com/grhyxzc/p/5058597.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!