c语言函数变量前加指针 c语言函数变量前加指针怎么写( 二 )


应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别 。如 int(*p)() 和 int *p() 是两个完全不同的量 。int(*p)() 是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p) 的两边的括号不能少 。
int *p() 则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个指向整型量的指针,*p 两边没有括号 。作为函数说明, 在括号内最好写入形式参数,这样便于与变量说明区别 。对于指针型函数定义 , int *p() 只是函数头部分,一般还应该有函数体部分 。
main()
{
int i;
char *day_name(int n);
printf("input Day No:/n");
scanf("%d",i);
if(i0) exit(1);
printf("Day No:%2d--%s/n",i,day_name(i));
}
char *day_n
ame(int n)
{
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n1||n7) ? name[0] : name[n]);
}
本程序是通过指针函数,输入一个 1 ~ 7 之间的整数 ,  输出对应的星期名 。指针数组的说明与使用一个数组的元素值为指针则是指针数组 。指针数组是一组有序的指针的集合 。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量 。
指针数组说明的一般形式为: 类型说明符 * 数组名 [ 数组长度 ]
其中类型说明符为指针值所指向的变量的类型 。例如: int *pa[3] 表示 pa 是一个指针数组 , 它有三个数组元素 ,  每个元素值都是一个指针 , 指向整型变量 。通常可用一个指针数组来指向一个二维数组 。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组 。图 6—6 表示了这种关系 。
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main()
{
int i;
for(i=0;i3;i++)
printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i3;i++)
printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));
}
本例程序中,pa 是一个指针数组,三个元素分别指向二维数组 a 的各行 。然后用循环语句输出指定的数组元素 。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 与 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值 。读者可仔细领会元素值的各种不同的表示方法 。应该注意指针数组和二维数组指针变量的区别 。这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的
C语言中关于指针变量与函数的用法 。#includestdio.h
1.申明数组
a[5],下标是应该从0~4的;
2.进行排序时需要用2个变量进行冒泡排序;
3.scanf时%d后面不需要空格 。
程序修改如下:
void
pa(int
*a,int
n)
{
int
i,j;
int
t;
for(i=0;in;i++)
【c语言函数变量前加指针 c语言函数变量前加指针怎么写】for(j=0;jn-i-1;j++)
if(*(a+j)*(a+j+1))
{
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)
=
t;
}
}
void
main()
{
int
a[5],i;
for(i=0;i5;i++)
scanf("%d",a[i]);
printf("未排序前的数列为:\n");
for(i=0;i5;i++)
printf("%d
",a[i]);
pa(a,5);
printf("排序后的数列为:\n");
for(i=0;i5;i++)
printf("%d
",a[i]);

推荐阅读