指针学习(1)

1、“带*类型” 的特征探测:宽度

:对于一个变量来说,最重要的一个特征就是数据的宽度。

2、“带*类型”的特征探测:声明

推荐不推荐
char* x;char *x;
short* y;short *y;
int* z;int *z;
float* f;float *f;
double *d;double *d;
Student* st;Student *st;

总结:
1.带有 * 的变量类型的标准写法: 变量类型* 变量名
2.任何类型都可以带* ,加上*以后是新的类型
3.*可以是任意多个

3、“带*类型”的特征探测:赋值

char、short、int 类型变量的赋值:

精简写法完整写法
char x;char x;
short y;short y;
int z;int z;
x = 1;x = (char)1
y = 2;y = (short)2;
z = 3;z = (int)3;

带 * 类型的变量的赋值:

char* x;
short* y;
int* z;
x = (char*)1;
y = (short*)2;
z = (int*)3;

数据的宽度:

#include "stdafx.h"    

void Function()		
{		
	char x;	
	short y;	
	int z;	
		
	x = 1;	
	y = 2;	
	z = 3;	
		
}		
int main(int argc, char* argv[])
{
	Function();
	return 0;
}

在这里插入图片描述
char、short、int分别是1个字节、2个字节、四个字节

void Function()		
{		
	char* x;	
	short* y;	
	int* z;	
		
	x = (char*)1;	
	y = (short*)2;	
	z = (int*)3;	
}		
int main(int argc, char* argv[])
{
	Function();
	return 0;
}

在这里插入图片描述
char*、short*、int*都为四个字节
char**、short**、int**一样为四个字节,在此没有列出,可自己试验
总结
1.带 * 类型的变量赋值时只能使用“完整写法”
2.带 * 类型的变量宽度永远是4字节、无论类型是什么,无论有几个 * .

4、“带*类型”的特征探测:++ –

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char* a ;		
	short* b ;		
	int* c ;		
		
	a = (char*)100;		
	b = (short*)100;		
	c = (int*)100;		
		
	a++;		
	b++;		
	c++;		
		
	printf("%d %d %d",a,b,c);		

	return 0;
}

在这里插入图片描述

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char** a ;		
	short** b ;		
	int** c ;		
		
	a = (char**)100;		
	b = (short**)100;		
	c = (int**)100;		
		
	a++;		
	b++;		
	c++;		
		
	printf("%d %d %d",a,b,c);		

	return 0;
}

在这里插入图片描述
总结:
1、不带 * 类型的变量,++或者-- ,都是加1,或者减1
2、带 * 类型的变量,也可进行++ 或者–的操作
3、带 * 类型的变量,++或者–时,增加(减少)的数值是减去一个 * 后变量的宽度

5、“带*类型”的特征探测:加上/减去一个整数

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char* a ;		
	short* b ;		
	int* c ;		
		
	a = (char*)100;		
	b = (short*)100;		
	c = (int*)100;		
		
	a = a + 5;		
	b = b + 5;		
	c = c + 5;		
		
	printf("%d %d %d",a,b,c);		
	return 0;
}

在这里插入图片描述

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char** a ;		
	short** b ;		
	int** c ;		
		
	a = (char**)100;		
	b = (short**)100;		
	c = (int**)100;		
		
	a = a + 5;		
	b = b + 5;		
	c = c + 5;		
		
	printf("%d %d %d",a,b,c);			
	return 0;
}

在这里插入图片描述
总结:
1、带 * 类型的变量可以加(减)一个整数,但不能乘或者除
2、带 * 类型变量与其他整数相加或相减时:
(1)带 * 类型变量 + N = 带 * 类型变量 + N × \times ×(去掉一个 * 后类型的宽度)
(2)带 * 类型变量 - N = 带 * 类型变量 - N × \times ×(去掉一个 * 后类型的宽度)

6、“带*类型”的特征探测:求差值

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char* a ;	
	char* b ;	
	
	a = (char*)200;	
	b = (char*)100;	
	
	
	int x = a - b;	
	
	printf("%d\n",x);				
	return 0;
}

在这里插入图片描述

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	short* a ;	
	short* b ;	
	
	a = (short*)200;	
	b = (short*)100;	
	
	
	int x = a - b;	
	
	printf("%d\n",x);				
	return 0;
}

在这里插入图片描述

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	short** a ;	
	short** b ;	
	
	a = (short**)200;	
	b = (short**)100;	
	
	
	int x = a - b;	
	
	printf("%d\n",x);				
	return 0;
}

在这里插入图片描述
上边的本来应该试一下int* 但是short** 消去一个 * 后的数据宽度都为4个字节,一样理解
总结:
1、两个类型相同的带 * 类型的变量可以进行减法操作(加法不能编译成功)
2、相减的结果要除以去掉一个 * 的数据的宽度

7、“带*类型”的特征探测:比较

#include "stdafx.h"	
int main(int argc, char* argv[])
{

	char**** a ;		
	char**** b ;		
		
	a = (char****)200;		
	b = (char****)100;		
		
		
	if(a>b)		
	{		
		printf("1");	
	}		
	else		
	{		
		printf("2");	
	}					
	return 0;
}

在这里插入图片描述
总结:
带 * 的类型,如果类型相同,可以做大小的比较

文章总结

这是开始学习指针的开始,初学习
带 * 的类型,所有的运算都要跟消去一个 * 相关

练习

本节练习:

1、char类型占几字节?char*类型占几字节?int*****占几字节?
:都占4个字节

2、char** arr[10] 占多少个字节?
: 40个字节
3、自定义结构体如下:

struct Student
{
int x;
int y;
};

第一步:

Student**** s;

s = (Student****)100;

s++; //s的值是多少?

s = s+2; //s的值是多少?

s = s-3; //s的值是多少?

s++104
s+2108
s-388

第二步:

Student**** s1;
Student**** s2;
int x;

s1 = (Student****)200;

s2 = (Student****)100;

x = s1-s2; //x的值是多少?
:25

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值