【C】char和数组的指针

char的指针

char* a = "hello";
char* b = "hello";
char a2[] = "hello"; 
char b2[] = "hello";

a = b,a2!=b2,a!=a2,b!=b2;
如果使用指针的方式指向一串字符串,那么这串字符串在常量区,a只是指向那段空间;
使用数组的方式,将会开辟新的空间存储这串字符串。

数组指针

int arr[10] = {0};

arr = &arr, 但是arr和&arr的含义不一样,arr代表数组首元素地址,&arr代表数组的地址。
&arr相当于这里的parr指针,是一个数组指针:

int (*parr)[10] = &arr;

如果对指针进行+1操作,arr+1跳过一个int数据,&arr+1跳过一整个数组对象。

数组传参

一维数组

传值传参:void func(int arr[10])
传指针传参:void func(int* arr)
看这里,传递过来的arr是什么?是第一个元素的首地址!
如果传的是数组指针将是什么情况?
如果在这个函数中使用[]访问了数组中的成员,将是什么结果?

#include <stdio.h>
void func(int(*p)[10])
{
	printf("%d", p[8]);
}
int main()
{
	int arr[10] = {0,1,2,3,4,5,6,7,8,9};
	func(&arr);
	return 0;
}

在这里插入图片描述

二维数组

传值传参:void func(int arr[][5])
这里可以省略行数,但不能省略列数!
为什么?
传指针传参:void func(int (*pa)[5])
这里是二维数组的模型,对于二维数组来言,它的第一个首元素是一个一维数组,所以这里传递的pa是一个数组指针。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值