C++/C中的指针

基本概念

1)每一个变量都有一个内存位置,每一个内存位置都有对应的内存地址,可以通过连字号(&)运算符访问,如:

#include <iostream>
using namespace std;

int var1;
char var2[10];

cout << "var1变量的地址:";
cout << &var1 << endl;

cout << "var2变量的地址:";
cout << &var2 << endl;

2)指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。

      用指针存储其他变量地址之前,需要对其进行声明。

int *ip;
float *fp;
double *dp;
char *ch;

所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数,大小均为4个字节。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

3)通过使用一元运算符 * 来返回位于指针变量所指定地址的变量的值

4)在初始化时,一般用空指针NULL。NULL指针是一个定义在标准库中的值为零的常量。

int *ptr = NULL; // 此时,ptr的值为 0 

在大多数操作系统上,程序不允许访问地址为0的内存,因为该内存是操作系统保留的。内存地址0有特别重要的意义,他表明该指针不指向一个可访问的内存位置。

指针类型

1)指向整型的指针

#include <iostream>
using namespace std;

int main()
{
    int a = 5;
    int *p = &a; // *p输出为5, p输出为变量a的地址
}

&用于取变量的地址,*用于取指针变量所指地址的值

 

2)指向字符型的指针

#include <iostream>
using namespace std;

int main()
{
    char c[] = "bubuday"; //等价于 char *c = "bubuday"; 所以c的类型为 char *
    char *p = c; // 等价于, char *p;  p = c;
	
    cout << c << endl;
    cout << p << endl;
    cout << *p << endl;
    return 0;
}

输出为:

3)指向整型指针的指针

#include "stdafx.h"
#include<iostream>
using namespace std;


int main()
{    
    int a = 1;
    int *ip = &a;
    int **ipp = &ip; // 指向整型指针的指针ipp
	
    cout << *ip << endl;
    cout << **ipp << endl;
    return 0;
}

输出均为1。

4)指向 字符指针数组 的指针

char *c[] = {"bubu", "day"};
char **c = {"bubu", "day"};  // 错误,c为指向指针的指针,*c为存储某一内存地址的指针,均只有一个存储单元
char **p;
p = c;

char *ca = "dooo";

c[0] = ca;

cout << *p << endl;

// 输出为 dooo

字符指针数组:char *c[] = {"bubu", "day"};

指向字符指针的指针 char **p

c和p的类型均为char **

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值