指针的认识

一.指针基础

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

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

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

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

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

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

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

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

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

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

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

	char* ptr1 = "abc";
	char* ptr2 = "abc";
	if (ptr1 == ptr2)
		printf("ptr1==ptr2\n");
	else printf("ptr1!=ptr2\n");//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.二维数组传参:二维数组传参,函数形参的设计只能省略第一个[ ]的数字(因为对一个二维数组可以不知道有多少行,但必须知道一行有多少个元素,这样算才能简便),如:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值