关于指针和数组

什么是指针:

指针也是一种变量,不过他是专门用来存放某一块内存的有且只有一个的地址的,即类似于门牌号的一串数字。

在32位/64位平台下指针的大小是固定的4/8个字节。

指针也有类型,其类型决定了指针的+-整数的长度是多少字节,还决定了指针解引用时操作的权限。

一级指针:

int main(){
	int a = 10;
	int* p = &a;
	return 0;
}

这里的int*类型的变量p就是一个一级指针,其解引用内容为p所存地址下的那一块内存的内容。

二级指针:

int main(){
	int a = 10;
	int* p = &a;
	int** q = &p;
	**q = 20;
	printf("%d\n",a);
	return 0;
}

这里的int** 类型的变量q就是一个二级指针,他所存内容是一级指针p在内存中的地址,因为是变量就会在内存中开辟一段空间,所以p是拥有地址的,二级指针解引用需要用两个**,这样就可以访问到一级指针所存地址下的内容了。

指针和数组:

其实这两者本没有联系,只是在C语言中看似稍微有那么点联系。

定义一个数组得有一个数组名,这是肯定的,而数组名在使用的时候可以隐式转换成一个指针,他保存了数组首元素的地址,而如果取数组名的地址那又表示什么呢,比如:

int main(){
	int arr[] = {1,2,3,4};
	printf("%d\n",arr);
	printf("%d\n", &arr);
	printf("%d\n", arr+1);
	printf("%d\n", &arr+1);
	return 0;
}

这里的输出结果为:

10157816
10157816
10157820
10157832

解释一下:arr表示该数组首元素的地址,而&arr表示一个数组指针,也就是一个指向整个数组的指针,用其首元素所在地址表示,当进行+1操作时,arr+1表示该数组名隐式转换成的指针向后移动int个长度,即一个元素的大小,指向该数组的第二个元素,&arr+1表示该指针数组,也是一个指针,不过他向后移动了该数组的整个的长度。,即16个字节。

指针数组:

首先他是一个数组,而这个数组里存放的是指针类型的元素。

int *arr[10]  []的优先级最高,先与arr结合,则arr是一个数组,而int*是数组里元素的类型。

eg:char* arr[2]={"hello","world"};     arr是一个数组,他的每个元素都是该字符串的首字母在内存上的那一块的地址。

数组指针:

首先他是一个指针,这个指针指向一个数组。

int(*p)[10]    ()的优先级最高,所以p是一个指针类型,而该指针指向一个拥有十个元素,每个元素都是int类型的数组。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值