c语言指针函数的调用,c语言中指针怎么使用

1,c语言中指针怎么使用我是这样理解的:在C语言中,你需要定义变量,那么你所定义的这个变量本身你要理解两层含义:(1)变量中的值是多少?有了值我们可以直接拿变量参与运算,eg. int a=5;在计算的时候a就表示5;(2)变量存储在内存中的什么位置?变量的存储位置 , 就是变量的地址,那么这个地址可以用指针来存储,eg. int a=5, *p=&a; 在这里p就是指针变量 , 存储了变量a的地址,这个时候你要是用a变量的值 , 即可以直接用a,也可以用*p , *p是通过p这个指针(也就是a的地址),间接的找到a,在程序中*p与a是等价的 。【c语言指针函数的调用,c语言中指针怎么使用】
2 , c语言中的指针问题以及子函数的调用你的理解没有错,但问题在于 , 作为函数的参数为指针参数,也就是说作为指针类型而言,参数是按值进行传递,不会因为函数内部对指针进行了交换而发生改变 。因此,第一个函数采用指针单元内的值进行交换,两个指针的内部值在外部是能反映出来,第二个函数在外部是反映不出来的 。第一个是在根据指针, 交换指针所指的数据第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了有多处错误,主程序中只有一处,但调用函数错得挺多的,最主要的是对结构指针的运用,stu *p 下,引用其数组不能用(*p)[xx],因为p本身就是结构数组的首址 , 所以直接用p[xx]即可访问定义的所有单元 。以下将你的程序依原风格进行修改 , 主程序中将修改前的错误代码罗列于右 , 而order函数因为修改的地方多所以不再提示修改处:#includetypedef struct student { int num; char name[20]; int a,b,c; double ave; }stu; stu order(stu *p,int n); int main() { stu s[6]; /*改为s[5]*/ int i; for(i=0;i<5;i++) { printf("input num:"); scanf("%d",&s[i].num); getchar(); printf("name:"); scanf("%s",s[i].name); /*原为scanf("%s",&s[i].name); */ printf("a\tb\tc\n"); scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c); s[i].ave=(s[i].a+s[i].b+s[i].c)*1.0/3; } order(s,5); printf("num\tname\ta\tb\tc\n"); for(i=0;i<5;i++) { printf("%d\t%s\t%d\t%d\t%d\t%lf\n",s[i].num,s[i].name,s[i].a,s[i].b,s[i].c,s[i].ave); } return 0; } stu order(stu *p,int n) { int j,k; stu index; for(j=0;j for(k=j+1;k if(p[j].ave>p[k].ave) { index=p[j]; p[j]=p[k]; p[k]=index; } }

    推荐阅读