对函数形参使用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;
}
}
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;
}
*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;//不可以更改地址,也不可以更改数据。