c语言指针笔记,C语言指针基础的笔记

1,C语言指针基础的笔记p1 p2本来没有任何关系的,执行了以上语句之后,p1 p2是两个不同的指针,但是这两个指针指向了相同的内容,就是整数a
2,c语言 指针你把for循环里的p<(p+10)改为p你的for循环有问题 。判断条件中两边都有变量 p<(p+10)p为正数就相当于 1<(1+10)那是永远不能满足的,除非p为负数了所以要改改int a[10], *p;int i=0;p=&a[0];for(i=0;i<10;i++) scanf("%d", p++);这句有点问题,应该是: for (;p<(a+10);p++)int a[10],*pp=&a;for(;p<(p+10);p++)scanf("%d",p);如果不能正常输入的话enter-----------ctrl+z----------------enter
3,关于C语言的指针定义例1:int *p;p=&a;例2:int a=3,*p=&a;在使用的时候,*号并不是指针的标志 直接使用p p是地址若加一个星号 就是p所指向的数值了用下面这段试下就明白了 。int a = 1; int b = 2; int *pb = &b; int *pa = &a; int **p = &pb; printf("pa:%d,p:%d\n",*pa,**p); *p = pa; printf("pa:%d,p:%d\n",*pa,**p);其实你看到的两个p不是同一个东西,他们就相当于上例里的p和pa只有在定义阶段会出现*p=&a,例如int a=5;int *p=&a;则a的地址就给了p;另外一种写法是这样:int a=5;int *p;p=&a;效果一样“*p=&a 这种情况实在定义*P的时候就复值了【c语言指针笔记,C语言指针基础的笔记】
4,c语言 指针修改如下:#include<stdio.h> void main()void average(float *p,int n);/*注意这里*/void search(float (*p)[3]); /*注意这里*/float score[3][3]=average(&score[0][0],9);/*注意这里*/search(score); } void average(float *p,int n)/*注意这里*/int sum,i,k;for(i=0;i<n/3;i++) /*注意这里*/sum=0;for(k=0;k<3;k++)/*注意这里*/sum=sum+*(p+i*3+k); /*注意这里*/aver=sum/3;printf("average= %5.2f\n",aver);} } void search(float p[][3])/*注意这里*/int i,j,flag;float aver,sum=0;for(i=0;i<3;i++)flag=0;for(j=0;j<3;j++)if(*(*(p+i)+j)<60)flag+=1;if(flag>1)printf("NO.%d fails,his scores are:\n",i+1);for(j=0;j<3;j++)printf(" %5.1f",*(*(p+i)+j));for(j=0;j<3;j++)sum=sum+*(*(p+i)+j);aver=sum/3;printf(" %5.2f\n",aver);}} }5,c语言 指针#include <stdio.h>int main() int a[10]= for(p=a;p<a+10;p++)//p是指针,批向数组的第一个元素,并将指针移到下一个元素 printf("%d,",*p++);//输出指针所指向的元素的内存,并将指针移到下一个元素 //上面是两次指向一下人元素,也就是说一次循环+2,++在后边是先使用再+1 printf("\n"); for(p=a;p<a+10;p++) printf("%d,",*++p);//++在前边,是先自加再使用 printf("\n"); return 0 ;}for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*p++); //这句是每次执行之后的p所指向的地址加1,第一次是a[0]的值这样每次循环p的地址加2,所以执行的结果是:1 , 3,5 , 7,9for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*++p); //这句是每次执行之前的p所指向的地址加1,第一次是a[1]的值这样每次循环p的地址加2,所以执行的结果是:2,4 , 6 , 8,0这里主要是*p++和*++p的问题 , 第一个for循环中p=a=a[0]=1<1+10运行printf语句 输出*p的值然后p值加1(printf语句中的p++) , 也就是指针指向后一个地址即a[1]=2,然后执行p值加1(for括号里的p++),也就是指针指向后一个地址即a[2]=3,以此类推输出1,3,5,7,9第二个for循环中p=a=a[0]=1<1+10运行printf语句 p值加1也就是*p指针指向后一个地址即a[1]=2然后输出*p的值(printf语句中的++p),,然后执行p值加1(for括号里的p++),也就是指针指向后一个地址即a[2]=3 , 以此类推输出2,4,6,8,0我也是初学者,这是我自己的理解,有些术语还不会说了 , 希望能这样解释清楚了吧 。第一个循环体中 , 先输出第1个元素,然后再指针后移,在循环计数的地方再后移一次,这样下次再输出的时候就是第三个元素了,所以输出下素为奇数的元素;第二个循环体中,先指针后移,然后再输出,这样就输出了第二个元素,之后再在循环计数的地方再后移一次,这样下次再输出的时候就是第四个元素了 , 所以输出下素为偶数的元素;运行结果如下图所示:

    推荐阅读