栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

零基础快乐学习C/C++——11

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

零基础快乐学习C/C++——11

指针 指针是什么

指针是个变量,存放内存单元的地址(编号)
可以粗略理解为指针就是地址

int a = 10;
int* p = &a;

在32位的机器上,地址是32个二进制序列,所以地址就要用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节
同理,在64位的机器上,一个指针变量的大小是8个字节

指针和指针类型

我们知道变量有不同的数据类型,那指针有没有呢?

int main()
{
	printf("%dn",sizeof(char*));
	printf("%dn",sizeof(short*));
	printf("%dn",sizeof(int*));
	printf("%dn",sizeof(double*));
	return 0;
}

打印后可发现都是4个字节,既然指针大小一样了,为什么还要区分指针类型呢?

int a = 0x11223344;
int* pa = &a;
*pa = 0;
char* pc = &a;
*pc = 0;

经过内存监视窗口可以知道,两个指针类型不同,会导致解饮用操作的不同

指针类型意义1:
指针类型决定了指针进行解饮用操作的时候,能够访问空间的大小

int *p: *p能够访问4个字节
char *p:*p能够访问1个字节
double *p:*p能够访问8个字节


指针类型意义2:
指针类型决定了:指针走一步走多远(指针的步长

int* p :p+1—>4
char* p :p+1—>1
double* p:p---->8

野指针

野指针就是指针指向的位置是不可知的

野指针的成因

  1. 未初始化
  2. 越界访问
  3. 指针指向的空间释放
int a;//局部变量不初始化,默认是随机值
int* p;//局部的指针变量,就被初始化随机值
*p = 20;

如何避免野指针

指针运算
  1. 指针±整数

  2. 指针-指针

    结果是9,所以指针减去指针得到的指针和指针之间的元素个数

int my_strlen(char* str)
{
	char* start = str;
	char* end = str;
	while(*end != '')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[]= "welcome";
	int len = my_strlen(arr);
	printf("%dn",len);

	return 0;
}
  1. 指针的关系运算

其实就是比较大小

指针和数组

要知道数组名是首元素的地址,只有两个例外,即

  1. &arr-----&数组名—此时的数据名不是首元素的地址,而是表示整个数组-----&数组名取出的是整个数组的地址
  2. sizeof(arr)----sizeof(数组名)表示的是整个数组----sizeof(数组名)计算的是整个数组的大小,单位是字节


输出发现值一样

二级指针
int a = 10;
int* pa = &a;
int* * ppa = &pa;//ppa就是二级指针

指针数组

存放指针的数组

int a = 10;
int b = 20;
int c = 30;

int* arr2[3]={&a,&b,&c};//指针数组
int i = 0;
for(i = 0;i<3;i++)
{
	printf("%d",*(arr2[i]));
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835735.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号