C/C++学习笔记之指针(1)
2020-03-28 20:03
701 查看
一.指针相关概念
1.指针变量的声明:
任意数据类型 (int/string/char等) *标识符(ptr等),比如 int *ptr 定义了一个纸指向int型数据的指针变量。指针数组:数组的每个元素都是指向同一类型的指针,格式:数据类型 *数组名[下标表达式],下标表达式指出数组元素的个数,数组名是这个数组的首地址,数组名是指针常量,比如 int *pa[3]。
关于指针类型的补充:
(1) 指向常量的指针:
int a; const int *b=&a; int c; b=&c;//正确,指针b本身的内容可以改变 *b=1;//编译出错,b指向的内容不能改变
(2)指针类型的常量:
int *const b=&a; b=&c;//出错,b本身的内容不能改变
指针没有初始化就赋值是相当危险的,因为它指向内存中一个随机地址。
(3)指向类的非静态成员的指针
可以使指针直接指向对象的成员,进而通过指针访问对象的成员。声明形式:
类型说明符 类名::*指针名
类型说明符 (类名::*指针名)(参数表)
访问数据成员时形式:
对象名.*类成员指针名
对象指针名->*类成员指针名
#include <iostream> using namespace std; class Test{ int x,y; public: Test(int i,int j=0){ x=i;y=j;} int get(int i,int j){ return i+j; } }; void main(){ Test t1(2),t2(4,6); int (Test::*p)(int ,int=10);//指针声明 p=Test::get;//指针名赋值 cout<<(t1.*p)(5)<<endl; Test *p1=&t2; cout<<(p1->*p)(7,20)<<endl; }
结果:
15
27
2.指针的赋值
2.1.两个运算符:
*和&,*ptr表示指针ptr所指向的数据的值,&i表示变量i的存储单元地址。注意:这两个符号出现的声明语句中和执行语句中其含义是不同的,他们作为一元运算符和二元运算符时的含义也是不同的。*出现在声明语句中时,表示声明的是指针,出现在声明语句的初始化表达式中或执行语句中时,表示访问指针所指对象的内容。&出现在声明语句中被声明变量的左边时表示声明的是引用,出现在赋值语句中时表示取对象的地址。
2.2.赋值
定义指针的同时赋值:数据类型 * 指针名=初始地址,定义之后单独使用赋值:指针名=地址。
3.指针的运算
3.1.指针直接运算
3.2.指针和数组(一维和二维数组)
`int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=a; cout<<p<<" "<<endl;//1 cout<<*p<<endl;//0018FF20 int i,j; int array[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int *ptr[3]={array[0],array[1],array[2]}; cout<<"指针:"<<endl; for(i=0;i<3;i++){ for(j=0;j<3;j++){ cout<<ptr[i][j]<<" "; } cout<<endl; } cout<<"二维数组:"<<endl; for(i=0;i<3;i++){ for(j=0;j<3;j++){ cout<<*(*(array+i)+j)<<" "; } cout<<endl; } return 0;
}`
运算结果:
如果将指针初始化(*p)[3]=b,地址等价形式:p+i、p[i]、*(p+i)都表示b数组第i+1行的第一个元素的首地址。*(p+i)+j、p[i]+j、&p[i][j]都表示b数组的第i+1行、第j+1列元素的地址。值的等价形式:*(*(p+i)+j)、*(p[i]+j)、p[i][j都表示b数组的第i+1行、第j+1列元素的值。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【C++学习笔记】数组和指针再C-风格字符串的演示
- C++ 指针学习笔记
- C++ Primer学习笔记2--c++中的数组和指针
- C++学习笔记---浅谈指针
- C++学习笔记 -- 函数指针与指针函数
- C/C++学习笔记:指针传值
- C++学习笔记---this指针
- C++基础学习笔记:指针
- 学习笔记之C/C++指针使用常见的坑
- c++ 学习笔记(47)-C++中两个类中互相包含对方对象的指针问题
- c++学习笔记--指针和const限定符
- C++函数指针 学习笔记
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
- c++学习笔记-------《c++自学通》第十章 高级指针
- C++学习笔记九之函数指针
- C++学习笔记10——指针
- 学习笔记(10):C++语言基础视频教程-3.10 常指针和常引用
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- C++学习笔记8-操作符&指针