指针、字节与指针++、++指针

一、什么是指针

  计算机的内存是以字节Byte(在程序中定义一个变量时,C编译系统会根据所定义的变量类型,为其分配一定的字节空间,在32位的出处理器中,short in型数据占2字节,int型数据float型数据占4字节,double占8字节,char型数据占1字节,一个字节由8位二进制数组成)为单位的连续的储存空间,每个字节都有自己的编号。就像酒店的每个房间都有自己的编号,房间编号是连续的不断开的,内存的编号也是连续的,一般采用十六进制来表示,计算机中这些字节的房间编号被称为内存地址。

  在C程序中,有两种方式存取储存单元的内容:

1.直接访问,通过变量名访问存取变量的内容

2.间接访问,通过访问存储变量的地址获取变量内容。其中存放变量地址的变量叫做指针

二、什么时候用指针

#include<iostream>
//#include<string>
using namespace std;
void swap(int , int);

void swap(int x,int y) {
	int t = 0;
	t = x;
	x = y;
	y = t;
}
int main() {

	int a = 15, b = 10;
	swap(a, b);
	cout << "a = " << a << ", " << "b=" << b << endl;
		return 0;
	
}
//运行结果为“a = 15, b = 20”

   由运行结果可见,参数的传递是从实参到形参的单方向传递,形参不会反过来把值传给实参,解决以上问题就需要指针。

三、怎么用指针

1.  数据类型 *指针变量名

int *p;

int *p1,*p2;

int *pa,pb;(指针变量pa与Int型变量);

怎么理解“*”
定义时int *p = &a;表示变量P是指针
使用时*p = 100;表示取值,取指针指向内存空间的值

2.使用printf打印时用“%p”输出地址

#include<iostream>
using namespace std;

int main() {
	int a = 100;
	int* pa = &a;
	printf("地址为:%p\n", pa);
		return 0;
	
}
//地址为:000000709F0FFA64

3. 指针指向

(1) 指针+1

  int型数据由4个内存单元组成,每个内存单元都有一个地址,但指针指向的永远是第一个存储单元,即任何类型的指针都指向存储该类型变量的首地址,所以指针+1,代表其存储的地址跳过(数据类型字节数)个存储单元。

指针的指向

所以: int *p;char *q;

p+1 == +4个字节

q+1 == +1个字节

(2)指针与前后缀++

  间接访问运算符与自加运算符优先级相同,结合性都是自右向左

#include<iostream>
using namespace std;

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


	int *p = &a[0];//或者*p = a;
	int *q = b;
	int* r = c;
	int* t = d;

	cout << "*p++ = " << *p++ << endl;
	cout << "*p++ = " << *p++ << endl;
	cout << "*p = " << *p << endl;
	cout << "(*p)++ = " << (*p)++ << endl;
	cout << "(*p)++ = " << (*p)++ << endl << "\n";

	cout << "*++q = " << *++q << endl;
	cout << "*++q = " << *++q << endl<<"\n";

	cout << "++*r = " << ++*r << endl;
	cout << "++*r = " << ++ * r << endl << endl;

	cout << "t++ = " << t++ << endl;
	cout << "t++ = " << t++ << endl;
	cout << "*t = " << *t << endl<<endl;



		return 0;
	
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值