关于指针的一些事情
程序员文章站
2024-03-14 18:10:28
...
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;
}
转载于:https://my.oschina.net/hujunil1/blog/164979