
正文
c语言数组与指针函数,c语言指针数组与数组指针
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言中的数组和指针的区别
C语言中,数组的名称等价于数组的首地址,
当然可以利用指针开辟动态空间,使用方式与数组在形式上相同的,
但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。
指针与数组的关系可以参考下面的网页:
相关问答
Q1: C语言中数组 函数 指针的合理学习顺序
如果初学应当先学指针,指针是C语言的重要概念,函数和数组能够控制指针,但要灵活运用,必须要理解指针的含义。
至于函数和数组就看你的喜好了,可以先理解数组,再学函数。
其实最好是三者相互结合起来理解,才能融会贯通。
Q2: c语言指针与数组,怎么联系起来?
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
Q3: C语言 怎么调用指针数组函数
1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义
2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
3.函数指针的声明方法为:
返回值类型( * 指针变量名) (形参列表);
“返回值类型”说明函数的返回类型,“( * 指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f = func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
例子:
#includestdio.h
int max(int x,int y){return (xy? x:y);}
int main(){
int (*ptr)(int, int);
int a, b, c;
ptr = max;
scanf("%d%d", a, b);
c = (*ptr)(a,b);
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
Q4: 大一C语言问题?一维数组与指针函数?
#includestdio.h
void Input(int *a,int n)
{int i;
for(i=0;in;i++)
scanf("%d",a+i);
}
int Max(int *a,int n)
{int i,max=*a;
for(i=1;in;i++)
if(*(a+i)max)max=*(a+i);
return max;
}
int Min(int *a,int n)
{int i,min=*a;
for(i=1;in;i++)
if(*(a+i)min)min=*(a+i);
return min;
}
float Avg(int *a,int n)
{int i,s=0;
for(i=0;in;i++)
s+=*(a+i);
return (float)s/n;
}
int main()
{ int a[10];
Input(a,10);
printf("最低分=%d\n",Min(a,10));
printf("最高分=%d\n",Max(a,10));
printf("平均分=%.1f\n",Avg(a,10));
return 0;
}






