c语言指针的表示方法,c语言 指针

1,c语言 指针int a[10],*pp=&a;for(;p<(p+10);p++)scanf("%d",p);如果不能正常输入的话enter-----------ctrl+z----------------enter你把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++)
2,C语言指针首先,*和&一定是作用于指针类型,所以首先保证你的p一定是一个指针类型 。*操作符返回某个指针所指的类型的值&操作符返回某个类型变量的存储地址下面来看:假如有一个整型变量i,它的值是100 , 存储在地址0x000000F0上(不要在意地址的合理性,仅是假设),p是指向i的一个整型指针(即int *p = &i),p存储在地址0x000000F4上 。下面:*p 表示p所指整型的值 , 即i的值,10&p表示整型指针p的存储地址,即0x000000F4*&p表示存储在0x000000F4上的整型指针变量的值 , 即指针p的值,即0x000000F0(变量i的地址)所以你的答案应该是:p与*&p一样,而*p与i一样案...(借用百度)给你给连接!这是百度文库的资料!讲的指针 http://wenku.baidu.com/view/36f6bff6ba0d4a7302763a1e.html指针学者不是很容易!
3 , 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);}} }【c语言指针的表示方法,c语言 指针】
4,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个元素,然后再指针后移,在循环计数的地方再后移一次,这样下次再输出的时候就是第三个元素了,所以输出下素为奇数的元素;第二个循环体中,先指针后移,然后再输出,这样就输出了第二个元素,之后再在循环计数的地方再后移一次,这样下次再输出的时候就是第四个元素了,所以输出下素为偶数的元素;运行结果如下图所示:5,C语言指针的用法#include<stdio.h> #include<math.h> #include <conio.h> void sort(char *a[],int n) int i,j; char *temp; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(strcmp(a[i],a[j]<0)) temp=a[i]; a[i]=a[j]; a[j]=temp; } } int main() char *a[3]; int i; for(i=0;i<3;i++) a[i] = (char *)malloc(sizeof(char)); for(i=0;i<3;i++) scanf("%s",a[i]); sort(a,3); for(i=0;i<3;i++) printf("%s\n",a[i]); getch(); } 应该改成这样 其中 char *temp; temp=a[i]; a[i]=a[j]; a[j]=temp; 做了修改 原因如下:未修改前temp是一个字符变量,而*a[i]是指针a[i]所指向的内容,就把需要交换的字符串的首字符交换了 。你要交换的是指针或者说是地址,而不是指针里的内容 。这就是问题所在 。在temp前加*就表示temp也是个指针,再把a[i]前的*去掉,就实现了交换指针地址的目的 。指针的声明要加*例如 int *a; 使用的时候如果事指针操作则不要带*例如 char *a = “hank”; a++;此时a指向的字符串就变成了“ank” 涉及到指针指向的内容的要加*例如 char b = *a;指向数组的指针,例如int b[10];int *a = b;a就是b[0]的地址*a就是b[0]的内容a+1就是b[1]的地址依此类推又如char *a = "hank";那么通过a就能得到整个字符串"hank"*a是h*(a+1)是a...STRCMP是c语言函数库中的函数虽然传参传的是指针 , 但是具体比较的时候比较的是里面的内容 。具体涉及到指向数组的指针的应用 。因为c中没有String类型,所以就只能使用char类型的指针来表示字符串 。程序不能运行 int main() 但是没有返回 strcmp函数的 第二个参数不对 还缺少头文件#include "string.h"void sort(char *a[],int n)int i,j;char* temp = new char[100];for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(strcmp(a[i],a[j])<0)temp=a[i];a[i]=a[j];a[j]=temp;} } void main() char *a[3]; int i; for(i=0;i<3;i++) a[i] = new char[100]; for(i=0;i<3;i++) scanf("%s",a[i]); sort(a,3); for(i=0;i<3;i++) printf("%s\n",a[i]); getch(); }在c语言中 , 指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一 。看下面这段代码: #includevoid f(int a, int* output){printf("a = %d\n", a);*output = a + 1;} typedef void (*func)(); int main(){func f = f;int ret = 0;f(3, &ret); printf("ret = %d\n", ret);return 0;} 上面看出 func 的类型是与f的类型不匹配的,这样可以通过编译吗? 答案是: 可以的 。由于在c语言中编译函数的时候,是仅仅将其函数名作为该函数的唯一标识,为其分配相应地址 。所以虽然func 与 f的类型不一致 , 但是对于编译器看来都是两个地址,是无所谓的 。用上面的特点 , 可以写出非常通用的函数指针类型,typedef int (*func)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志 。随说做了有一段时间的c了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了! 一般有两种用法: 1定义函数指针 int (*functionpoint)(int, int)----这只是定义了一个指向函数的指针 int a(int a,int b)----------------这是与之相符的函数原型 void main()-----------------------使用 {functionpoint = a;------------先赋值functionpoint(1,2);----------调用} 2用typedef定义使用 typedef int (*functionpoint)(int,int);----------定义了一种类型名为functionpoint的指针 int a(int a, int b)-----------------------------函数原型 void main() {functionpoint fun;---------------------------定义指针fun = a;-------------------------------------赋值fun(1,2);---------------------------------使用} 函数就是这个函数的指针.

    推荐阅读