C/C++ 指针学习

一、什么是指针

C语言里,变量存放在内存中,而内存以字节单位编制的,内存每个字节对应一个地址,CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。

二、声明指针

2.1 定义并初始化指针

指针变量的定义:
type * variable;
解析:

  • * 表示该变量是指针变量
  • type 表示该变量内存放的地址的寻址能力
int *p;        // 声明一个 int 类型的指针 p
int *arr[10]   // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p;       // 声明一个指针 p ,该指针指向一个 int 类型的指针

两种运算符,

  1. & :取地址运算符,获取变量的地址
  2. * :取内容运算符,获取存放在内存地址中的数据

声明一个指针变量并不会自动分配任何内存。在对指针进行间接访问之前,指针必须进行初始化:或是使它指向现有的内存,或者给它动态分配内存。初始化例子如下:

	int *p;
	int *p_var;
	int num = 10;
	p = #
	p_var = p;
	cout << &num << endl;  //num变量的地址
	cout << *p << endl;     //指向变量的值
	cout << p_var << endl;  //num变量的地址
	cout << *p_var << endl; //指向变量的值

运行结果如下:
运行结果

2.2 未初始化和非法指针

一个指针变量,如果指向一个无效的空间,则该指针称为野指针,是由invalid pointer 翻译过来,直译是无效指针。常见情况有两种,一种是未初始化,另一种则指向已经被释放的空间。
对野指针的写入成功,造成的后果不可估计,比较难发现和调试。
NULL指针 ,俗称空指针,常用NULL给临时的指针进行初始化,或对已释放内存空间的指针赋值。

三、指针运算

3.1 赋值运算
3.2 算术符运算
3.3 关系运算

#include "stdio.h"

int main(){
    int a[10] = {1,2,3,4,5,6,7,8,9,0};
    int sub;
    int *p1 = &a[2];
    int *p2 = &a[8];

    sub = p2-p1;                                                                            
    printf("%d\n",sub);    // 输出结果为 6

    return 0;
}

四、指针与数组

数组除了可以用下标法和本质法访问以外,还可以用指针法访问。能用数组名解决的问题的,都可以用指针来解决,而能用指针来解决的问题,并一定能用数组名来解决。
例如:用指针访问数组数据

int arr[]={1,2,4,8};
int *p = arr;
for(int i = 0 ;i<4;i++){
	printf("arr[%d]=%d\n",i,*p++); 
}

*p++:等价于*(p++)。其作用:先得到*p,再使 p=p+1。
指向数组元素的指针也可以表示成数组的形式,即允许指针变量带下标,如
*(p+i)可以表示成 p[i]。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值