C 语言中 const,指针,数组例子

对函数形参使用const,在函数中不可以修改形参。

/*ryan-c*/


#include <stdio.h>

#define SIZE 10

void show_array(const int ar[],int n);
void mult_array(int ar[],int n,int mult);

int main(void)
{
	
	int  day[SIZE]={22,32,1,254,334,323,123,12432,324,43};
	int index;

	show_array(day,SIZE);
	mult_array(day,SIZE,5);
	show_array(day,SIZE);
	
	
	return 0;
}



void show_array( const int ar[],int n)
{
	int i;

	for(i=0;i<n;i++)
	{
		//printf("%5d",ar[i]++);//形参声明为const,不能在函数中改变数组
		printf("%5d",ar[i]);
	}
	putchar('\n');
}

void mult_array(int ar[],int n,int mult)
{
	int i;

	for(i=0;i<n;i++)
	{
		ar[i]*=mult;
	}
}


jiang@ubuntujeos:~/c/20110825$ gcc aday.c -o aday.o;./aday.o
   22   32    1  254  334  323  12312432  324   43
  110  160    5 1270 1670 1615  61562160 1620  215


当实参为const时,形参必须要const。

/*ryan-c*/


#include <stdio.h>

#define SIZE 10

void show_array(const int ar[],int n);
void mult_array(int ar[],int n,int mult);

int main(void)
{
	
	int  const day[SIZE]={22,32,1,254,334,323,123,12432,324,43};
	int index;

	show_array(day,SIZE);
	//mult_array(day,SIZE,5);//不允许,数组定义为const,形参必须也声明为const
	show_array(day,SIZE);
	
	
	return 0;
}



void show_array( const int ar[],int n)
{
	int i;

	for(i=0;i<n;i++)
	{
		//printf("%5d",ar[i]++);//形参声明为const,不能在函数中改变数组
		printf("%5d",ar[i]);
	}
	putchar('\n');
}

void mult_array(int ar[],int n,int mult)
{
	int i;

	for(i=0;i<n;i++)
	{
		ar[i]*=mult;
	}
}


jiang@ubuntujeos:~/c/20110825$ gcc aday.c -o aday.o;./aday.o
   22   32    1  254  334  323  12312432  324   43
   22   32    1  254  334  323  12312432  324   43



指向常量的指针不能用于修改数值。但可以指向其他地址

#include <stdio.h>

#define SIZE 10



int main(void)
{
	
	int   day[SIZE]={22,32,1,254,334,323,123,12432,324,43};
	const int *ptr=day;//指向常量的指针
	printf("*ptr=%d\n",*ptr);
	//*ptr=28;//不允许改变指针指向的值
	day[0]=55;//day不是常量,所以可以修改
	printf("*ptr=%d\n",*ptr);
    
	ptr++;  //可以让指针指向其他地址
	printf("*ptr=%d\n",*ptr);

	
	
	return 0;
}



jiang@ubuntujeos:~/c/20110825$ gcc aday.c -o aday.o;./aday.o
*ptr=22
*ptr=55
*ptr=32


将常量或非常量的数据地址赋给常量指针是合法的,但不可以通过常量指针修改数据。普通指针不能接受常量的地址。

/*hai836045106-c*/


#include <stdio.h>

#define SIZE 10

int main(void)
{
	
	int   day[SIZE]={22,32,1,254,334,323,123,12432,324,43};
	int const lockday[SIZE]={22,32,1,254,334,323,123,12432,324,43};
	const int *ptr;//指向常量的指针
	ptr=day;       //可以指向非常量数据,不能修改
	printf("*ptr=%d\n",*ptr);
	ptr=lockday;   //也可以指向常量数据,不能修改
	printf("*ptr=%d\n",*ptr);
    
	int *pnc;//普通的指针
	pnc=day; //可以指向非常量
	printf("*pnc=%d\n",*pnc);
	//pnc=lockday;//不可以指向常量

	
	
	return 0;
}


jiang@ubuntujeos:~/c/20110825$ gcc aday.c -o aday.o;./aday.o
*ptr=22
*ptr=22
*pnc=22

常量指针与指针常量 (使用 const声明时必须初始化指针)

常量指针:指向常量类型地址的指针  const int * p //不可以修改数据,但可以指向别处

指针常量:指针类型的常量          int * const p;    //可以修改数据,但不能指向别处


指向常量类型地址的的常量指针:const int *const p;//不可以更改地址,也不可以更改数据。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值