为啥指针变量不能+1在赋予它地址呢?哪位大神能解答一下
#include<stdio.h>int main()
{
void max(int b,int c,int d);
int *a,b,c,d,i;
scanf("%d %d %d",&b,&c,&d);
a=&b;
a+1=&c;
a+2=&d;
max(b,c,d);
printf("%d %d %d",*a,*a+1,*a+2);
}
void max(int b,int c,int d)
{int e;
if(b>c)
{
e=b;
b=c;
c=e;
}
if(b>d)
{
e=b;
b=d;
d=e;
}
if(c>d)
{
e=c;
c=d;
d=e;
}
} 如图所示,就是一个用指针比大小的程序 本帖最后由 风过无痕1989 于 2020-10-15 09:55 编辑
程序是错误的 !
变量定义时,系统即为其分配地址,初始化,即向该地址中填充数据。定义int a 时,编译器分配4个字节内存,并命名该4个字节的空间名字为a(即变量名),当用到变量名a时,就是在使用那4个字节的内存空间;同样,也会给 b、c、d 分配地址,但编译器并没有保证让他们的地址连续。
这好比一群好朋友外出旅行住宾馆,如果没有预约,宾馆方面可以保证让你们都住下,却不能保证让你们都住在同一层楼,更不能保证让你们的房间号挨着,甚至不能保证让你们住在同一幢楼。
但如果你事先有预约,他们会安排。这又好比数组、字符串、结构体等。
所以,你的程序在编译时,系统会告诉你 a + 1 = &c、a + 2 = &d 是错误的,它会要求右侧是一个值( error C2106: '=' : left operand must be l-value ),而不是一个地址。 风过无痕1989 发表于 2020-10-15 09:27
程序是错误的 !
变量定义时,系统即为其分配地址,初始化,即向该地址中填充数据。定义int a 时,编译 ...
#include<stdio.h>
int main()
{
void max(int b,int c,int d);
int *a,*e,*f,b,c,d,i;
scanf("%d %d %d",&b,&c,&d);
a=&b;
e=&c;
f=&d;
max(b,c,d);
printf("%d %d %d",*a,*e,*f);
}
void max(int b,int c,int d)
{int e;
if(b>c)
{
e=b;
b=c;
c=e;
}
if(b>d)
{
e=b;
b=d;
d=e;
}
if(c>d)
{
e=c;
c=d;
d=e;
}
}
你好,我修改了程序,这个程序可以运行,但是为啥不能变换大小呢
风过无痕1989 发表于 2020-10-15 09:27
程序是错误的 !
变量定义时,系统即为其分配地址,初始化,即向该地址中填充数据。定义int a 时,编译 ...
我知道是我下面的无法返回值,大佬能告诉我是啥原理,我把函数删了,加在主函数里,就有用,那应该怎样修改才比较好呢? 风过无痕1989 发表于 2020-10-15 09:27
程序是错误的 !
变量定义时,系统即为其分配地址,初始化,即向该地址中填充数据。定义int a 时,编译 ...
#include<stdio.h>
int main()
{
int qipaofa(int a[]);
int *e,a,i;
int v;
for(i=0;i<3;i++)
scanf("%d",a);
e=qipaofa(a);
printf("%d,%d,%d",*e,*(e+1).*(e+2));
}
int qipaofa(int a[])
{
int g,j,k;
for(j=0;j<2;j++)
for(k=0;k<2-j;k++)
if(a>a)
{
g=a;
a=a;
a=g;
}
}
为啥我这个不行呢,大神麻烦了,初学者不太懂 yzz123 发表于 2020-10-15 21:12
#include
int main()
{
主函数调用函数来进行数据交换,直接调用是无法完成的,虽然你定义的那个函数的参数(形式参数)与主函数调用时的的实参是同名的,但它们并非是同一个 b (或 c,或 d)。举个例子说吧:长江路 180 号有一个李建国,黄河路 180 号也有一个李建国,它们不过是同名同姓而已,并非是同一个人。
回到主题,要想调用函数进行交换,就得将地址(指针其实也是传地址)作为实参传给函数 #include<stdio.h>
int main()
{
void max(int *b,int *c,int *d);
int *p1,*p2,*p3,b,c,d;
scanf("%d %d %d",&b,&c,&d);
p1 = &b;
p2 = &c;
p3 = &d;
max(p1,p2,p3);
printf("%d %d %d\n",b,c,d);
}
void max(int *b,int *c,int *d)
{
int temp = 0;
if(*b < *c)
{
temp = *b;
*b = *c;
*c = temp;
}
if(*b < *d)
{
temp = *b;
*b = *d;
*d = temp;
}
if(*c < *d)
{
temp = *c;
*c = *d;
*d = temp;
}
}
页:
[1]