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

指针的认识

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

指针的认识

一.指针基础

1. 指针的多种理解:指针是一种类型,可以定义指针类型的变量;指针就是内存地址,因为它指向了内存空间;指针说的就是指针变量

2 .指针的两种类型:本身的类型、指向的类型

3. 指针的大小:指针的大小、所能访问的指向空间的大小

ps: sizeof(p)   如32位4个字节,64位8个字节 ;

sizeof(*p)如int *p为4、char *p 为1

4. PS:C语言中没有字符串类型,所以用字符数组来模拟实现字符串

字符串默认会带有结尾标志‘’(等价于数字0,但是要与字符零‘0’区分开),针对字符串的所有操作都是以结尾标志作为标识的

char str[]="abc";    默认为abc后面有, eg:

char *strcpy(char *dest ,char *str)   功能:将str字符串的内容拷贝到dest空间中

5. 字符串给指针进行初始化赋值时,实际上赋值的是常量字符串的地址;字符数组进行字符串的初始化赋值时,赋值的是字符串的内容。eg:

int main()
{
	char str1[] = "abc";
	char str2[] = "abc";
	if (str1 == str2)
		printf("str1==str2n");
	else printf("str1!=str2n");//str1!=str2   两个字符串开辟了俩个空间,两个字符串不同

	char* ptr1 = "abc";
	char* ptr2 = "abc";
	if (ptr1 == ptr2)
		printf("ptr1==ptr2n");
	else printf("ptr1!=ptr2n");//ptr1==ptr2    运用的是指针,因为两个字符串内容相同,所以指向的是同一块地址,所以俩个量相同
}

详细解释:

6. 字符数组的输出可以使用%s直接传入首地址进行输出(如char str[]="abc";  printf("%s",str);  );但其它的数组的数据输出,不能只是用首地址,需要遍历操作(如使用for循环来打印)

7.无类型指针 void *:

void是无类型,通常用于定义函数的返回值类型或者参数的类型,表示没有返回值或者参数。

void*是无类型指针,通常用于表示无关大小的指针类型,只关心指向的指针类型。

8. 指针数组:本质是一个数组,只不过数组的每一个元素都是一个指针。

eg:  指针:int *p    数组: int arr[10]     

--> 指针数组: int *parr[10];  -->含义:先表示一个数组,然后表示数组中的元素都是一个指针,而这个指针是整型指针。

 eg: 定义一个具有20个元素的字符指针数组:char *arr[20];

9.数组指针:是一个指针,指向类型是一个数组。

eg: int  (*p)[10];  p是一个指针,指向了一个具有10个整型元素的数组

eg: 定义一个具有10个整型指针元素的数组指针:int *(*p)[10];

eg:

 10.数组名   和   &数组名

数组名:数组首元素的地址

对数组名取地址:数组的地址(即数组指针)

通常数组名再大多数使用场景都被认为是数组首元素的地址。但有两个场景不同:

1.数组名取地址  2.sizeof(数组名)

PS:数组名是数组之间的,指针是一块空间,两者是有差别的

eg: int arr[10];

arr +1  :数组第一个元素的地址

&arr+1:跳过整个数组,指向最后一个元素的结尾处

ps:

二.数组传参

1.一维数组传参

2.二维数组传参:二维数组传参,函数形参的设计只能省略第一个[ ]的数字(因为对一个二维数组可以不知道有多少行,但必须知道一行有多少个元素,这样算才能简便),如:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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