c语言指针问题求详细过程 C语言指针问题(求高人指点啊)

作者&投稿:锺度 (若有异议请与网页底部的电邮联系)

贴上代码,图片中讲解了程序运行过程,希望能帮助你加深对指针的理解。
#include <stdio.h>
f(int *a, int *b, int *c) {
int *t;
t=a;
a=b;
b=t;
*t=*b;
*b=*c;
*c=*t;
}

main() {
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
f(p1,p2,p3);
printf("%d,%d,%d",a,b,c);
}


主函数中p1->a=5,p2->b=7,p3->c=3
调用f函数的参数的顺序是(p1,p2,p3)。
f函数中:a指向主函数中的a,b指向主函数中的b,c指向主函数中的c。
t=a,t指向主函数中的a;
a=b,a指向主函数中的b;
b=t,b指向主函数中的a;
*t=*b,由于t和b都指向主函数中的a,所以主函数中a的值=主函数中a的值=5;
*b=*c,主函数中a的值=主函数中c的值=3;
*c=*t,主函数中c的值=主函数中a的值=3
计算结果:
主函数中a的值=3
主函数中b的值没有变化,仍是7。

中秋节在红楼梦里被写到多次,但贾府过中秋,却安排在其贾府覆灭之时,字里行间满是悲凉意味,其实曹公已经伏下八十回后大悲之事。...详情

关于C语言指针的问题,求程序运行的结果,要过程。~

#includeint *f(int *s,int *t) //一个返回值为int类的指针的函数,参数是两个指针int类指针;{if(*s<*t) *s=*t; //如果指针t指向地址的值,大于指针s所指向的值;就把指针t指向地址的值赋与指针s所指向地址的值;return s; //返回指针s的地址;}main(){int i=3,j=5,*p=&i,*q=&j,*r;r=f(p,q); //运行后,*p所指向i地址的值被修改为5; printf("%d,%d,%d,%d,%d
",i,j,*p,*q,*r); //输出都是5;}//希望对你有帮助!

让我来帮你综合一下!!!
1、int *p,*q;q=p;
这句基本是对的(但要看你怎么用),首先定义了*P,*q两个指针,q=p这句是将地址p赋给了q,没有问题;
看下面两个句子:
printf("%d",q);----这个句子是正确的,它只是把q中的地址(既p的地址)输出!!
printf("%d",*q);----但这个句子就是错误的了!!*q为p中数据的值!因为p中的内容是未被定义的,所以编译器会在运行是出错哦!!!

int a,*p,*q;p=q=&a; -----这个同上面的道理是一样的,

printf("%d",q);----正确,输出a的地址;
printf("%d",*q);----如果a没有被定义,那么编译器就会报错咯!


2 int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;

分析下:如果这是在一个程序中,第一错就在重定义上!第一行定义了a,*P,第二行又定义a,*p!--重定义下面就不说了,
第二个错在 p=*q;看来你还没理解指针变量,书上明确定义指针变量只能用来存放地址!而*q是一个具体的值(数或者字符什么的)!
第三个隐性错误!*p=a;从你的定义看,指针p未被初始化!(p=*q是错误的)如果你把p=*q改成p=q那么*p=a;就没问题了。如果你删了p=*q,那就错咯!


3 int a=b=0,*p;p=&a;b=*p
int a=20;*p,*q=&a;*p=*q;

分析下:int a=b=0;定义整型变量a,b,但在不同的编译器上不一定正确。有的机子上你要这样定义才正确:int a,b;a=b=0;
*p;p=&a;b=*p:---定义了指针p把a的地址给了p,在把p中存放地址的值(既a的值)给b;-----这句明显是正确的哦!
看下一句:int a=20;*p,*q=&a;*p=*q;错啦!!(标点符号也错啦!)
第一个错:明显p没有初始化!运行是会报错!
第二个错:*q=&a,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;要明白p存放的是地址,而*p存放的是值。(不考虑多重指针的情况)
看下一句:*p=*q---是正确的,意思是把q所指向的地址上的值给p指向的地址的指。给你个例句:
int a=10,b=20;
int *p=&a,*q=&b;
*p=*q;
结果很明显a=20;既*p=20


4 int a=20;*p,*q=&a;p=q;
int p,*q;q=&p;

最后一点啦!第一行!看似没错!其实---,事实上c语言的定义不能在一次定义中引用此次定义的其他变量!像你的int a=20;*p,*q=&a;p=q;
*q=&a,由于a属于此次定义中的变量,所以出错咯!应该分开定义就OK啦!
int a=20;
int *p,*q=&a;p=q;
注意一点int *p=&a;初学者很不明白!不是,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;??那为什么这里又正确呢?

其实这有一个误区,你可以这样看(int *)p=&a;当然这样定义是错的
我只是说这样看!在定义指针时把指针定义符‘*’与前面的类型‘int’看成一块!int *p=&a;与下面句子等效
int *p; p=&a;
而int *p; *p=&a是错误的!!

最后一句:int p,*q;q=&p;
注意你这里p是一个整型的变量!!不是指针!像前面的a,b.
明显这句是正确的!

不知道满意不?

c语言指针问题求详细过程
答:贴上代码,图片中讲解了程序运行过程,希望能帮助你加深对指针的理解。#include <stdio.h>f(int *a, int *b, int *c) {int *t;t=a;a=b;b=t;*t=*b;*b=*c;*c=*t;}main() {int a=5,b=7,c=3;int *p1=&a,*p2=&b,*p3=&c;f(p1,p2,p3);printf("%d,%d,%d",a,b,...

C语言 指针的一道题 求详细的过程,感激不尽,
答:int a = 20, b = 10;pp = &a;//此时pp指向的内存里面的值就是a的值,20 p = &a;//此时p指向的内存里面的值就是a的值,20 pp = &b;//这里pp重新指向了变量b的地址,也就是pp指向的内存里面的值是b的值了。printf("%d, %d\n", *p, *pp);//*p的意思是取p指向的内存里面的...

有一个关于c语言指针的题,求详解,具体见内容
答:答案是D 在循环开始,ptr指向了数组的首地址,经过一次循环,指针指向了下一个字节。第一次循环 ptr指向该数组第一个字节,通过printf函数,输出了指针所指的字符串“ABCDE”一次循环,每次指针后移一个字节。然后输出该字符串。参考资料:p

C语言关于指针的一题。
答:/*答案是6,过程如下*/ include<stdio.h> main(){ int a[]={2,4,6},*prt=&a[0],x=8,y,z; /*定义整形数组a,把2、4、6依次存入数组a的前三个地址 中,定义一个整形指针prt,并把数组a中首地址的值赋值给 prt指向的地址中*/ for(y=0;y<3;y++)z=(*(prt+y)<x)?*(pr...

一个C语言指针问题。求大佬解答?
答:在这个程序中,我们首先提示用户输入方阵的尺寸,然后输入方阵的元素。接着,我们通过遍历方阵的每一行,并使用指针指向每行对应列的元素,来求出方阵对角线元素之和。最后,我们输出结果。程序的输出示例如下:include <stdio.h> int main(){ // 方阵的尺寸 int n;printf("Enter the size of the ...

问两道有关c语言字符指针的问题,请将程序每一步的意思告诉我,谢谢啦...
答:第一题答案:B。理由:*s与*t都是取出此时地址存储的值,while()语句里面的意思是,当指针s与t都不为空并且s指向的值等于t指向的值。。。当s或者t为空或者t与s指向的值不同时,while()结束,返回此时s指向的值减去t指向的值,所以为比较两个字符串的大小;第二题答案:A。理由:x的地址赋值...

c语言程序指针问题
答:一、指针变量的初始化问题指针变量同普通变量一样,使用之前不仅要定义说明,而且必须进行初始化,指针的 初始值必须是一个地址,决不允许赋予任何其他数据, 通常是一个数据的地址或地址 变量或空指针。1、指针变量未被初始化指针变量未被初始化,指针变量就不会...

c语言指针的问题,希望详解
答:理解指针前需要理解几个相关的问题:1.对于非特定的内存分配是有系统进行动态分配的,既然动态了,那么分配的地址就会存在差异,这个系统内存分配算法相关,运气好点的,几次都会看到同一个地址。2.内存是动态移动的,而不是静止的,这个知道下就好了 === 输出十六进制用%x,输出格式自己可以百度或者拿出...

C语言指针数组问题 求高手详解
答:的计算过程序,当k=0时,p[0]=m也就是指针p[0]指向的是数组m的开始 当k=1时,p[1]=m+2;因此p[1]指向m+2的位置,也就是从数字4开始的位置 当k=2时,p[2]=m+8;因此p[1]指向m+8开始的位置,也就是&m[8]开始的位置,即数组m中的第9个元素的地址,也就是16 再来看for中循环...

c语言指针问题,具体如下
答:include <stdio.h>#include <stdlib.h> int find (int *p, int m, int n, int num, int *row, int *col);int main(){ int m,n,*p,row,col,num,i;//需要输入的变量 scanf("%d %d",&m,&n);//读取输入的m,np=(int *)malloc(sizeof(int)*m*n);//动态分...