先给你解释一下指针变量和指针,还有指针变量指向的变量的分别意思。
指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。
printf("%d",p);}
在这里,定义了指针变量p,指针变量p又被赋予了a的地址,此时a的地址就是指针变量p的值;而p就是指针变量指向的变量,此处是整型变量,由于p被赋予的是a的地址,所以说这个变量就是a,即p=a接着因为a被赋予了5,也就是p就是为5
这样你就可以理解n=0是什么意思了,也就是n是一个指针变量,这个指针变量指向的变量是一个整型变量,n就是一个整型变量,n这个整型变量被赋值为0;
然后是你的第二个问题:n++,因为和++是同优先级,并且是自右向左运算(你查下书的附录可知),所以说,相当于(n++),意思是取了n这个值之后,再n++,即往下一个地址去,然后接着取这个地址的值;再n++一直往下取。
而(n)++呢,就是先取了n这个值之后,然后再把n这个值自增1
如果不明白,建议多看几遍书哦!
函数和调用的例子如下。适用于 数组 a[n][n], 和 s[n] 的情况。
#include <stdioh>
void fun(int a, int s, int n){
int i,j,k;
k=nn;
for (j=0;j<n;j++){
s[j]= (a+jn);
for (i=0;i<n;i++)
if ((a+jn + i) > s[j]) s[j]= (a+jn + i);
}
}
int main ( )
{
int a[5][5],s[5];
int i,j;
for (j=0;j<5;j++) for (i=0;i<5;i++) a[j][i]=j10+i;
fun( &a[0][0], s,5);
for (i=0;i<5;i++) printf("%d ",s[i]);
return 0;
}
C语言 形式逻辑不成立(C语言的缺点!)。
int a[ 10] ,p=a; 是声明,声明中 p=a 表示p是指针,初始化把a数组的首地址赋给它。
p=a;是语句,不是声明,形式一样,就不行了!
因为 语句 里,p 表示p 指向的 值。
同样的形式,意思不同,形式逻辑不成立,(C语言的缺点!)。
初学者,人人遇到这个问题!
#include<stdioh>
void input(int p,int num)
{
// int a[10]; 不能在子函数中再定义了,要用形参对应的实参, 子函数中定义的是局部变量,函数完成时,变量就释放了。
// for(p=a;p<a+10;p++)
int i;
for(i=0;i<num;i++)
scanf("%d",p+i);
}
void sort(int p,int num)
{
// int a[10]; 同前
int i,j,temp;
// for(p=a;p<a+10;p++)
for(i=0;i<num;i++) //数组下标从0开始
{
for(j=i+1;j<num;j++)
if(p[i]<p[j])
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
void output(int p,int num)
{
//int a[10]; 同前
// for(p=a;p<a+10;p++)
int i;
for(i=0;i<num;i++)
printf("%d ",(p+i));
}
int main()
{
int a[10];
input(a,10);
sort(a,10);
output(a,10);
return 0;
}
#include<stdioh>
struct student
{
char name[10];
float math;
float english;
float c;
};
void main(int arbc, char argv[])
{
struct student stu[10], ss = stu;
int i;
float sum[10] = {0}, aver[10] = {0};
for(i = 0; i < 10; i++)
{
printf("please input student name: \n");
scanf("%s", ss->name);
printf("please input student score of math: \n");
scanf("%f", &(ss->math));
printf("please input student score of english \n");
scanf("%f", &(ss->english));
printf("please input student score of c: \n");
scanf("%f", &(ss->c));
sum[i] += ss->math + ss->english + ss->c;
aver[i] = sum[i] / 3;
ss++;
}
for(i=0; i < 10; i++)
{
printf("student[%d]: %s\tsum of score: %f, average: %f\n", i, stu[i]name, sum[i], aver[i]);
}
}
以上就是关于c语言设计——指针全部的内容,包括:c语言设计——指针、C语言用指针编写程序、C语言程序设计 指针变量赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)