C++/oop---指针

C++/oop---指针

按理说指针不是c++特有的东西,只是我恰好发现自己不太会,赶紧补一下

 

int *p 定义指针 p 指向 int 型变量

以下写法均可

int* p / int * p

p = &a (& 取地址)

指针本身的类型是 unsigned long int

*p 取内容

 

指针保存着变量的地址,改变指针所指的地址上的值即改变变量

int a=1;
    int *p=&a;
    cout<<p<<' '<<*p<<endl; 
    //0x1ed4fe1c 1
    *p=2;
    cout<<a<<endl;
  //2

 

空指针

int *p=NULL;//或者写0

则 p 指向 0 ,也就是什么都没有

指针可以++ ,-- 这在指针指向数组元素时有用

其中++-- 都是有乘比例因子的,因子与数据类型有关。

 

指向数组的指针

数组名其实是一个地址,指向数组的头

 

    int x[10]={1,2,3};
    int *p=x;// 同为指针,就不需要取地址了
    cout<<p<<' '<<(*p)<<' '<<p[0]<<' '<<p[1]<<endl;
    //0x1ed4fdf0 1 1 2

例如x=0x1ed4fdf0

x[0] 应该是*x的另一种写法

x[1]为*(x+1)

...

也就是一维数组的本质是指针,给函数传数组相当于传一个指针

int f(int *a){
    int sum=0;
    for(int i=0;i<10;i++)sum+=a[i];
    return sum;
}
int main(){
    int x[10]={1,2,3};
    cout<<f(x)<<endl;
    return 0;
}

 

似乎写成 int f(int a[]) 也可以,原理似乎是一样的

 

二级指针

int i, *p = i;
int **pp = &p;

应该用处不大

 

指针数组

int *s[10]; 相当于10个指针

数组指针

int (*s)[10] 小括号不可省略

表示一个指向有十个元素的一维数组的指针

这可以用来处理二维数组

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
    int x[2][3] = {{1,2,3},{4,5,6}};
    int (*p)[3]=x;
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            cout<<*(*(p+i)+j)<<' '; 
            // p[i][j]
        }
        puts("");
    }
    return 0;
}

 

指针和字符串

char *s1 = "Hello world!"

系统在内存中开了一个长度为 13 的空间来储存字符串,并且将首地址给了 s1 

13 = 12 + '\0'

等价写法 char s1[] = "Hello world!" 

 

posted @ 2022-02-26 09:35  liankewei123456  阅读(68)  评论(0编辑  收藏  举报