在你提供的代码上进行了增加,我感觉你们老师可能是想让你们把指针用在数组上吧,对于一个指向数组的指针p,p◆◆指向数组的下一个元素.此外,使用指针可以很好的提升代码执行效率.有问题可以互相交流.
#include stdio.h
#include stdlib.h
int square(int a, int b)
{
return a*b;
}
int main()
int i, j, l, w, s = 0, number = 1, max;
int *length = l, *width = w, *p = i;
printf("请输入您所需测量田地的数量: \n");
scanf("%d",p);
int a[*p];
int *y = a;
for(j = 0; j *p; j◆◆)
printf("请输入第%d块田的长和宽: \n", j◆1);
scanf("%d %d",length,width);
*(y◆j) = square(*length, *width);
s = s ◆ *(y◆j);
max = *y;
if( *(y◆j) max)
max = *(y◆j) ;
number = j◆1;
printf("您第%d块田的面积为%d:\n",j◆1,*(y◆j));
printf("您的田地总面积为: %d \n", s);
printf("您最大面积一块第为第%d块,面积为%d !!!", number, max);
return 0;
*p:是数据指针.
**P:是变量指针.
***P:呵呵,我没见过.
所谓指针可以简单的理解为是一个间接访问的地址.如有一个变量a,如果要访问则可以直接写a时行访问,用指针的话则P=a,以后再写下面的程序时P就等于变量a,是变量所在的地址.
**P是指向指针的指针.如有一指针*S,用**P做为指针变量.P=S是P所指向的是指针S的地址.
c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.所以呢,说指针是c语言的灵魂,一点都不为过.指针就是地址.
计算机中的内存都是编址的,就像你家的地址一样.
C 中函数调用是按值传递的,传入参数在子函数中只是一个初值相等的副本,无法对传入参数作任何改动.但实际编程中,经常要改动传入参数的值.这一点我们可以用传入参数的地址(也就是指针)而不是原参数本身,当对传入参数(地址)取(*)运算时,就可以直接在内存中修改,从而改动原想作为传入参数的参数值.
例如:
void inc(int *val)
(*val)◆◆;
main()
inc(a); //传a的地址
printf("%d" , a);
函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的.一零点函数的地址就是该函数的入口点.所以呢,函数指针可被用来调用一个函数.函数的地址是用不带任何括号或参数的函数名来得到的.(这很类似于数组地址的得到方法,即,在只有数组名而无下标是就得到数组地址.)
怎样说明一个函数指针变量呢 ?
为了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针", 你可以使用下面的说明语句:
int (*fn_pointer) ();
为了让编译器能正确地解释这句语句, *fn_pointer 必须用括号围起来.若漏了这对括号, 则:
int *fn_pointer ();
的意思完全不同了.fn_pointer 将是一个函数名, 其返回值为 int 类型的指针.
在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址. 我们可以把函数的这个首地址 ( 或称入口地址 ) 赋予一个指针变量, 使该指针变量指向该函数.然后通过指针变量就可以找到并调用这个函数.我们把这种指向函数的指针变量称为 " 函数指针变量 " .
函数指针变量定义的一般形式为:
类型说明符 (* 指针变量名 )();
其中 " 类型说明符 " 表示被指函数的返回值的类型. "(* 指针变量名 )" 表示 "*" 后面的变量是定义的指针变量. 最后的空括号表示指针变量所指的是一个函数.
例如: int (*pf)();
表示 pf 是一个指向函数入口的指针变量,该函数的返回值 ( 函数值 ) 是整型.
下面通过例子来说明用指针形式实现对函数调用的方法.
int max(int a,int b)
if(ab)return a;
else return b;
main()
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:/n");
scanf("%d%d",x,y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:
a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的.数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的.
b. 函数调用中 "(* 指针变量名 )" 的两边的括号不可少,其中的 * 不应该理解为求值运算,在此处它只是一种表示符号.
前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针 ( 即地址 ) ,这种返回指针值的函数称为指针型函数.
定义指针型函数的一般形式为:
类型说明符 * 函数名 ( 形参表 )
...... /* 函数体 */
其中函数名之前加了 "*" 号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型.
如:
int *ap(int x,int y)
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别.如 int(*p)() 和 int *p() 是两个完全不同的量. int(*p)() 是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量, (*p) 的两边的括号不能少.
int *p() 则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个指向整型量的指针,*p 两边没有括号.作为函数说明, 在括号内最好写入形式参数,这样便于与变量说明区别. 对于指针型函数定义,int *p() 只是函数头部分,一般还应该有函数体部分.
int i;
char *day_name(int n);
printf("input Day No:/n");
scanf("%d",i);
if(i0) exit(1);
char *day_n
ame(int n)
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
指针数组说明的一般形式为: 类型说明符 * 数组名 [ 数组长度 ]
int *p=a[0];
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 列的值.读者可仔细领会元素值的各种不同的表示方法. 应该注意指针数组和二维数组指针变量的区别. 这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的
①.、使用场景
使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:
#includestdio.h
int main(int argc, char const *argv[])
int *b,*d;
int *e=a; //e指向a数组首地址
//printf("%d\n", *b);
d=c;? //d指向c的地址来表示值
b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值
printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);
(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元
int *a=nums;
printf("%d %d %p\n",*a,*(a◆1),a);
扩展资料:
指针的运算
指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算
(1)值运算:直接通过*运算方式,像a◆*(a◆1),结果为第一个元素与第二个元素相加.
printf("%d\n",*a);
以上就是土嘎嘎小编为大家整理的c语言函数中的指针怎么用相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!