指针与const、指针与数组

本文详细介绍了指针与数组的关系,包括指针指向数组的方式,数组指针与普通指针的区别,以及const在指针中的应用,展示了常量指针和指针常量的概念及其正确用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是指针

一、指针与数组

  1.指针指向数组表达方式:

int a[] = {3,5};

<1> int *p = &a[0];

<2>int *p = a;

但是不能是int *p = &a;否则会报错 "int (*)[2]" 类型的值不能用于初始化 "int *" 类型的实体。

注意:为什么不能“&数组名”

其实可以这样理解int a[2]就这个而言
a数组里面的元素是int类型的,也就是说a[0]与a[1]是int类型的
而a是int*类型的,因此a是一个指针,它指向a[0]这个地址,但它是一个大小固定并且指向的位置不能改变的。

2.指针数组、数组指针

  2.1 数组指针

int a = [4,7]; 

int (*p)[2] = &a;     p是一个指针,指向一个数组,数组内是两个整型数据 

  若p+1,

#include<iostream>
using namespace std;

int main() {
	int a[] = {3,1,5,9 };
	int(*p)[4] = &a;
	cout << p + 1 << endl;
	
		return 0;
	
}
//0000006159CFFAC8

p+1 随机指向一片内存 

数组指针与int *q = &a[0]有什么区别呢?普通指针q+1时,由a[0]到了a[1] ,而数组指针p+1时,指针直接跳出了整个数组。

 可根据以下代码清晰概念

#include<iostream>
using namespace std;

int main() {
	int a[] = { 3,1,5,9 };
	int(*p)[4] = &a;//p是一个指针
	int* q = a;
	for(int i = 0;i<4;i++)
	cout << a[i] << endl;
	 
	cout <<"数组指针:\n"<< "    p      = " << p << endl;
	cout << "    *(p+1) = " << *(p + 1) << endl << endl;

	cout <<"普通指针:\n" << "    q      = " << q << endl;
	cout << "    *(q+1)= " << *(q + 1) << endl << endl;;

	cout << "    &a[0]  = " << &a[0] << endl;
	cout << "    a[0]   = " << a[0] << endl;

	
		return 0;
	
}

 

2.2指针数组 int* a[4]

p是一个数组,数组内有三个元素,每个元素都是指针,指向整型数据(使用时不要忘记初始化)。

#include<iostream>
using namespace std;

int main() {
	int b[] = {3,1,5,9 };
	int* a[4];

	for(int i=0;i<4;i++)
	a[i] = &b[i];//初始化

	for (int i = 0; i < 4; i++)
		cout << *a[i] << ", a["<<i<<"] = "<<a[i]<<endl;

	
		return 0;
	
}

3.for循环与(指针+1)

#include<iostream>
using namespace std;

int main() {
	int a[] = {3,1,5,9 };
	int* p;
	p = &a[0];
	for (int i = 0; i < 4; i++)
		cout << *p++ << " ";//或*(p+i)
		return 0;
	
}
//3 1 5 9
//这里也能说明指针+1,加的是数据类型占的储存单元个数

二、const与指针

1.常量指针:const 修饰指针

  const int *p = &a;(方便记忆:先是const,再是指针,所以叫常量指针)

指针指向可以改变,但指针指向值不可以改。

正确使用:

#include<iostream>
using namespace std;

int main() {
	
	int a = 10;
	int b = 20;
	const int* p = &a;//const之后是指针,所以叫常量指针
	p = &b;
	cout << *p << endl;
	
		return 0;
	
}

//20

错误使用❌ 

2.指针常量 :

  int * const p = &a;(快速记忆:先是int *声明一个指针,再const,所以叫指针常量)

正确使用:

#include<iostream>
using namespace std;

int main() {
	
	int a = 10;
	int b = 20;
	
	int* const p = &a;
	*p = 30;
	cout << *p << endl;
		return 0;
	
}

//30

错误使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值