①指针数组与数组指针②只读指针变量和只读变量指针

       指针数组和数组指针

        指针数组可以简单地理解为装着指针的数组;

        指针数组定义时,类型与存储地址所指向的类型一致 ;

        *arr[ 4 ]:根据优先级,因为“[ ]”的优先级要比“*”要高,所以arr先与“[ ]”结合,构成一个数组的定义,数组名为 arr,再结合*,这个数组的元素是指针类型,共4个元素,也就是说,该数组包含 4个指向 int 类型数据的指针,这是“指针的数组”,即指针数组。

        获取数组长度其中一种方法是使用sizeof(array) / sizeof(array[0])。

        在C语言中习惯上在使用时都把它定义成一个宏,比如:

        #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}

        数组指针:本质是一个指针变量,这个指针指向一个数组的首地址 

        对于语句“int(*pa)[4]”,“( )”的优先级比“[ ]”高,“*”号和 pa 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,pa 是一个指针,它指向一个包含 3*4 个 int 类型数据的数组.

        练习一下打印:

         只读指针变量和只读变量指针

        只读指针变量

        只读指针变量,从const往左看,优先结合*,说明是只读指针变量 

void fun(void)
{
	int a=100;
	int b=200;
	int *p;		//定义int 类型指针变量 
	p=&a;		//初始化指针变量p
	p=&b;
	int *const p2=&a;//只读指针变量,从const往左看,优先结合*,说明是只读指针变量 
	printf("p所指向的内容是:%d\n",*p);
	a=300; 
	printf("a修改后的内容是:%d\n",a);//值可以修改
	p2=&b; //指针不可以修改 
	*p2=&b;//可以修改 
	 
}

        只读变量指针

        从const往左看,优先结合int,说明是只读变量指针 

#include <stdio.h>
void fun1(void)
{
	int a=100;
	printf("a的内容是:%d\n",a); 
	int b=200;
//	int *p;		//定义int 类型指针变量 
//	p=&a;		//初始化指针变量p
//	p=&b;
//	p2=&b;
	a=300; 
	printf("a修改后的内容是:%d\n",a); 
	int const *p2=&a;//只读指针变量,从const往左看,优先结合int,说明是只读变量指针 
	//*p2=400; 只读变量指针,无法修改内容
	a = 400;//通过变量本身可以修改内容 
	printf("p所指向的内容是:%d\n",*p2);
}

        普通指针变量,可以修改指针变量的值,也可以修改指针变量的地址

        只读指针变量,值可以修改,地址不能修改;

        只读变量指针,值不能修改,地址也不能修改;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值