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 @   liankewei123456  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-02-26 dtoj3317. 人类基因(human)
2020-02-26 dtoj2623. B
点击右上角即可分享
微信分享提示