指针与数组

指针与数组

首先,需弄清楚指针的具体含义。
计算机的内存以字节为单位。一般一个字节(8个二进制位)称为一个内存单元。声明变量后,系统会根据要求给这个变量分配相应的内存空间。如:
int a;int b;
int型数据,被分配4个字节的存储单元。
数据存储空间首字节的地址就是数据的地址。
我们把变量的地址称为变量的指针。
我们把存放地址(而不是普通数据)的变量称为指针变量。
即,指针就是变量的地址,是指存储单元的编号。

指针变量的初始化

由于指针变量是用来存放地址的,因此不能把普通数值赋给指针变量,而应该将变量的地址赋给指针变量。
例:

int a=5;
int *p;//定义一个指针变量
p=&a;//把变量a的地址赋给指针变量p,称作p指向a

如果p=5,系统会报错。
而且,int型的指针变量,只能指向同一数据类型的变量。

指针变量的使用

定义指针变量p后,p里面保存的是a的地址,此时,需要“*”()即指针运算符(或间接访问运算符)来找到a的值。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int *p;
	int a=5;
	p=&a;
	cout<<p;
	return 0;
}

此时系统输出的不是a的值,而是p所储存的地址

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int *p;
	int a=5;
	p=&a;
	cout<<*p;
	return 0;
}

这时输出为0

注意:避免使用未初始化的指针,会导致运行错误。

一维数组的指针表示

数组名表示数组首元素的地址。(数组名可认为是一个固定不变的常量指针)
指针不仅可以指向变量,同样可以指向数组。
例:

int a[10];
int *p;
p=&a[0];

p=a等价于p=&a[0]
数组a[i]的地址可以表示为&a[i],或a+i,那么*(a+i)就可表示这个地址所指的对象,即a[i]。
例:输入n个整数,倒序输出

#include<stdio.h>
int main()
{
	int n;
	int a[500],*p=a,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(p=a+n-1;p>=a;p--)
	{
		printf("%d ",*p);
	}
	return 0;
 } 

#include<stdio.h>
int main()
{
	int n;
	int a[500],*p=a,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
		printf("%d ",*(a+i));
	}
	return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值