一提C语言利用指针做的题目
int (*ptr)[2]; 这表示 一个数组的指针, 并非 int *ptr[2] (此为指针数组)
前者 表示 ptr 指向 一个 长度为2 的一维数组, 意味着 指针移动的单位 是 一个数组 并非一个元素
后者 表示 ptr是一个 存储两个 指针类型变量的 数组 (ptr是这个数组名 并非一个指针)
所以 前者多用在 二位数组的行指针, 后者多 (每个元素为一个指针,但每个指针 指向的 元素长度可以不等(如字符串这类的)) 非等长(列数不等)二位数组 也有用到
既然 楼主没有 用到二位数组 那么 这两种类型都是不合适的
要实现楼主的意思 很简单啊
int *ptr;
ptr=a;
这两行 改成这样 就行啦 其余行不用改的
应该就编译通过啦
还有一点 要注意啦 a的确是 数组名 也是 首地址,但绝对不是一个指针啦 ,是一个地址型常量
所以 像a++之类 把它当指针来用的语句都是错误的 (他的值是不能变的)
楼主 的 这个编译错误 显然 是一个 类型 不匹配 赋值 造成的
意思是 赋值号 ‘=’ 不能把一个 int[2]型 转为int(*)[2]; (为什么会错 看来前面的 就知道了 两者的值类型 是不同的 虽说都是地址, 不可能转换)
希望有帮助啦
/*
从键盘上输入三个整数a,b,c,然后用三个整形指针指向它们,分别是pMax,pMid,pMin。
要求不改变a,b,c的原始内容,让pMax,pMid,pMin分别指向三个数中最大的,次大的和最小的数,
并输出a,b,c以及pMax,pMid,pMin所指向内存区域的值
*/
#include
#include
int main(void)
{
int a = 0 , b = 0 , c = 0;
int *pMax = NULL, *pMid = NULL, *pMin = NULL;
printf("输入 a=");
scanf("%d",&a);
pMax = &a;
printf("输入 b=");
scanf("%d",&b);
pMid = &b;
printf("输入 c=");
scanf("%d",&c);
pMin = &c;
printf("a的地址为[%d],值为[%d],b的地址为[%d],值为[%d],c的地址为[%d],值为[%d]
",&a,a,&b,b,&c,c);
int *pTmp = NULL;
if ( *pMid > *pMax )
{
pTmp = pMax;
pMax = pMid;
pMid = pTmp;
}
if ( *pMin > *pMax )
{
pTmp = pMax;
pMax = pMin;
pMin = pTmp;
}
if ( *pMin > *pMid )
{
pTmp = pMid;
pMid = pMin;
pMin = pTmp;
}
printf("pMax指向的地址为[%d],指向的值为[%d],pMid指向的地址为[%d],指向的值为[%d],pMin指向的地址为[%d],指向的值为[%d]",pMax,*pMax,pMid,*pMid,pMin,*pMin);
fflush(stdin);
getchar();
return 0;
}
{
int leng = strlen(s);
if(n >= leng)
s = "\0";
char * tmp = new char[n + 1];
for(int i=0;i<n;i++)tmp[i]=s[i];
printf("result:%s", tmp);
}
#include <stdio.h>
void strrshift(char *s,int n)
{ int i,m;
char ch;
m=strlen(s);
for(i=0,i<n;i++)
{ ch=*(s+m-1);
for(j=m-1;j>0;j--)
*(s+j)=*(s+j-1);
*s=ch;
}
return;
}
main()
{ int n;
char *s;
scanf("%d",&n);
printf("Input a string:\n");
gets(s);
strrshift(s,n);
printf("output new string:\n");
puts(s);
}
void fun(char *w,int n)
{ //具体指针分配内存和释放什么的就没有写,很久没有用C编写了
int i;
int length=sizeof(w)/sizeof(char);
char *a,*x;
for(i=0;i<=n;i++){
a[i]=w[i];
x[i]=w[n-length+i];
w[i]=x[i];
w[n-length+i]=a[i];
}
}
C语言编程,使用指针,完成一字符串中大小写的转换
include <stdio.h> include <ctype.h> void convertToUppercase(char *); void main() { char string[] = "characters and &32.98"; printf("The string before conversion is: %s", string); convertToUppercase(string); printf("\/nThe string after conversion is: %s\/n", string); } v...
c语言指针编程题,求解。
include<stdio.h> include<string.h> define N 10000 void StrSort(char (*p)[N],int n){ char t[N];for(int i=0;i<n;i++)for(int j=0;j<n-i-1;j++)if(strlen(p[j])>strlen(p[j+1])){ strcpy(t,p[j]);strcpy(p[j],p[j+1]);strcpy(p[j+1],t);} } int ...
C语言菜鸟:如何用指针生成回文数组?
所谓回文数组,就是从高到底和从低到高遍历,得到的是相同序列。该数组具有对称性。如果一个数组不是回文数组,可以把对称位置上值不相等的元素修改为相等,来生成回文数组。用指针可以按照如下思路:1 定义两个指针head和end,head指向数组头,end指向数组尾。2 比较两个指针指向的值,如果不相等,则令...
...统计其中正数的个数,并计算它们之和。要求利用指针操作实现...
int main( void ){ int arr[ 20 ], i, sum = 0,count = 0;int * p = arr;for( i=0; i<20; i++, p++ ){ scanf( "%d", p );if( *p > 0 ){ sum += *p;count++;} } printf( "正数有%d个,它们的总和是%d\\n", count,sum );return 0;} 使用指针的优点是代码比...
C语言怎么用指针代替二维数组
( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p1+i)+j)。同样,a[i][j]也可使用指针下标法表示,如p[i*N+j]。若有:int *p=a[0];则数组a的元素a[1][2]对应的指针为:p+1*4+2 元素a[1][2]也就可以表示为:*( p+1*4+2)用下标表示法,a[1][2]表示为:p[1*4+2...
C语言-基础教程-指针与指针变量
指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥的效率。有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效,清爽。但由于指针对初学者来说,难于理解和掌握,需要一定的计算机硬件的知识做基础,这就需要多做多...
c语言利用指针代替下标进行数组编程?
include<stdio.h> int main(){ int a[6],*p;for(p=a;p<a+6;p++)scanf("%d",p);for(p=a;p<a+5;p++)p-=*(a+5);for(p=a;p
C语言:用指针实现字符串大小的比较,应该怎样做呢?
字符串比较,可采用循环遍历字符串,用对应位置的指针所指向的字符进行比较,当相等时,循环,遇到不等或其中一个字符串结束时,结束循环,返回对应指针的对应的字符的差值,根据差值判断两个字符串的大小:返回值大于0,则前串大,返回值小于0,则前串小,返回值等于0,两个字符串相等。参考代码:inclu...
C语言如何利用指针,将数组倒置啊
include <stdio.h>void func(int *a,int n){ int *p,t; for(p=a+n-1;a<p;a++,p--) { t=*a; *a=*p; *p=t; }}int main(){ int a[10],i; for(i=0;i<10;++i) { scanf("%d",&a[i]); } func(a,10); for(i=0;i<...
C语言、用指针方法实现一个3*3矩阵的转置
p=&a[0][0];\/\/将数组首元素赋给指针变量p move(p);\/\/函数调用 cout<<"处理后的矩阵:"<<endl;for(i=0;i<3;i++)\/\/输出处理后的矩阵 { for(j=0;j<3;j++){ cout<<setw(5)<<a[j];} cout<<endl;} return 0;} \/\/交换函数 void move(int*pointer){ int i,j,t;for(i=...
郝很谷氨: 号啊大哥.还有,你的算法正确吗?这一步交换; for(;i<=n;i++) { t=*(s+i); *(s+i)=*(s+n-i); *(s+n-i)=t } 简直就是好玩,换过去了,又换过来.写成:for(;i<=n/2;i++) { t=*(s+i); *(s+i)=*(s+n-i); *(s+n-i)=t } 就行了.还有啊,写程序的时候,要注意风格!宁愿程序长一点,也要有好的风格.要不写得公不公,母不母的,只会让自己的程序变得难看.
长武县13943971708: c语言指针编程题 - ?
郝很谷氨: int cmp(int *a,int *b){ if(*a>*b) return 1; else if(*a==*b) return 0; return -1; }
长武县13943971708: 一提C语言利用指针做的题目 - ?
郝很谷氨: void strrshif(char* s, int n) { int leng = strlen(s); if(n >= leng) s = "\0"; char * tmp = new char[n + 1]; for(int i=0;i printf("result:%s", tmp); }
长武县13943971708: C语言两道题目,用指针实现.求大神帮忙 - ?
郝很谷氨: void halfswap(int* a, int* b, int arrlen) { int *ae = a + arrlen / 2; while(a != ae) { int t = *a; *a = *b; *b = t; ++a, ++b; } } int findnum(int* a, int l, int n) { int* c = a; int* ae = a + l; while(a != ae) { if (*a == n) return a - c; ++a; } return -1; } void removeIndex(int* a, ...
长武县13943971708: 我想问一个C语言关于指针的题!小题!! - ?
郝很谷氨: 运行了一下,除了 if((P-a[0])%4==0) 这里的 P应该为p之外,没出错.指针运算好像没有错误.
长武县13943971708: c 语言的指针题 - ?
郝很谷氨: #include main() {char *s[]={"one","two","three"},*p;//定义一个字符串数组s,和一个指针p p=s[1];//让p指针指向第2个字符串 printf("%c,%s\n",*(p+1),s[0]);//分别输出p指的字符串的第2个字符和第一个字符串 }
长武县13943971708: 一个和指针有关的C语言题?
郝很谷氨: int main(void) {char a[30];char* b = (char *)malloc(20 * sizeof(char));printf("%d,", sizeof(a)); //数组大小是30,printf("%d,", sizeof(b)); //注意b是指针,在32位系统中,指针永远是4,16位中指针是2,所以这里不是4就是2.printf("%d,", sizeof...
长武县13943971708: c语言的指针编程题?
郝很谷氨: *p 是取 指针p的地址; 这个地址如果只是定义了 如 char *p 这样而未被赋值.那麽这时*p的值应该是由windows给其分配的0-64K之间的一个随机值. 而这个p后面你被str1赋值. 那么这时的p的内容是str1这个字符数组的首地址. 由于数组类型是连续...
长武县13943971708: 一个C语言指针的题——试题描述 输入N个学生的C语言程序设计课程成绩,请你设计一个函数 - ?
郝很谷氨: #include struct stu { int num; char name[20]; float grade; }; int main() { int n,i,n1; float sum=0.0,ave; printf("请输入学生人数:\n"); scanf("%d",&n); struct stu *p; p=(struct stu*)calloc(n,sizeof(stu)); printf("请输入%d个学生信息(学号,姓名,成绩):\n",n); for(i=0;i
长武县13943971708: 几道C语言指针题目?
郝很谷氨: 最后一题题目有点问题,int *p,a=4;和p=a;照它这样说的话,那么指针p就没有指向了,应改为int *p,a=4;和p=&a;