关于指针的一些事情

原创
2013/09/28 02:40
阅读数 27
1.可以申明 指向常量的指针,此时不能通过指针来改变指针对象的值,但是指针本身可以更改,可以指向另外的对象
例如:
int a;
const int *p1 = &a;	//p1是指向常量的指针
int b; 
p1 = &b1;	        //正确,p1本身的值可以改变
*p1 = 1;	        //编译时出错,不能通过p1改变所指向的对象

使用指向常量的指针,可以确保指针所指向的常量不被意外更改,如果用一般的指针存放常量的地址,编译器就不能保证所指向的数据不被更改。

2.可以申明指针类型的常量,这时指针本身的值不能改变。
例如:

int * const p2 = @a;    
p2 = @b;  //错误,p2 是指针常量,值不能改变

3.一般情况下,指针的值只能赋给相同的数据类型的指针,但是有一种特殊的 void类型的指针,可以存储任何类型的对象地址,就是说任何类型的指针都可以赋值给void类型的指针变量。经过是有类型显示转换,通过void类型的指针变可以访问任何类型的数据。 但是不能定义void类型的变量

4.指针型函数和指向函数的指针

#include <iostream>

using namespace std;

//指针型函数 :返回指针的函数
/*
定义形式:
数据类型 * 函数名(参数列表)
{
        函数体; 
} 
*/ 

//函数指针:指向函数的指针
/*
定义形式:
数据类型 (*函数指针名)(形参列表); 
*/ 
int * intAdd(int a,int b){
    int *r;    
    int restult = a+b;
    r = &restult;
    return r;
}

int main(int argc,char *argv[]){
    int *r = intAdd(1,2);
    cout<<*r<<endl;
    
    int* (*pointFunciton)(int,int);//int* 表示该指向函数的指针返回的是一个int型的指针 
    pointFunciton = intAdd;
    
    int *r2 = pointFunciton(3,4);
    cout<<*r2<<endl;
    system("pause");    
    return 0;
}
5.打印数组

#include <iostream>
using namespace std;

void printArr1(int *arr,int n){
     for(int i=0;i<n;i++){
             cout<<arr[i]<<" ";       
     }
     cout<<endl;
}

void printArr2(int *arr,int n){
     for(int i=0;i<n;i++){
             cout<<*(arr+i)<<" ";       
     }
     cout<<endl;
}

void printArr3(int *arr,int n){
     for(int *p = arr;p<(arr+n);p++){
             cout<<*p<<" ";       
     }
     cout<<endl;
}

//打印二维数组 
void printTwoDimensionalArr(int **arr,int n,int m){
     for(int i=0;i<n;i++){
             for(int j=0;j<m;j++){
                     cout<<*(*(arr+i)+j)<<" ";
             }
             cout<<endl;
     }
}
void printTwoDimensionalArr2(int arr[3][3],int n,int m){
     for(int i=0;i<n;i++){
             for(int j=0;j<m;j++){
                     cout<<*(*(arr+i)+j)<<" ";//或者 *(arr[i]+j)
             }
             cout<<endl;
     }
}
int main(int argc,char *argv[]){
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    printArr1(a,10);
    printArr2(a,10);
    printArr3(a,10);
    cout<<"打印二维数组:"<<endl;
    
    int a1[3] = {1,2,3};
    int a2[3] = {4,5,6};
    int a3[3] = {7,8,9};
    
    int *arr2[3] = {a1,a2,a3};
    
    int arr3[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int **m = static_cast<int **>(arr2);
    printTwoDimensionalArr(m,3,3);
    printTwoDimensionalArr2(arr3,3,3);
    system("pause");
    return 0;
}

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部