十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第三次答复:
十多年的太平网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整太平建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“太平网站设计”,“太平网站推广”以来,每个客户项目都认真落实执行。
void
createLine(struct
Node
*rear,int
item)
跟
void
createLine(struct
Node
**rear,int
item)
实际上本质是一样的,你理解引用就可以了,不过这个改法挺巧妙,只要改一个字符,比我的好。
类似于函数int
add(int
a)
int
b;
add(b);
你在add函数里面是可以改函数外变量b的值一样。
你的函数加了,这样就可以在createline函数里改函数外变量node的值了。
*******************************************
第二次答复:
我是一楼
输出是:
1.--0
2.--0
3.--3d2470
tem_addr=3d24d8,tem_value=2
rear_add=3d24d8,rear_value=2
after
createLine:
1.--2
2.--2
3.--3d24d8
完全符合楼主的要求。
刚才有事走了,没解释一下,现在解释一下。
void
createLine(struct
Node
*rear,int
item)
这样子声明函数,你在函数里面只能改rear指针对应的对象值,而rear本身的值就是传入的node的值你是改不了的,
所以函数里面的
rear=tem;
你知识改变了函数局部变量rear值,但改不了传入的node的值。
所以得用指针的指针就可以改传入的node的值了。
传入的是node的地址,所以就可以根据node的地址改node的值了,当然也可以根据node的值改node对应的对象的值
(*rear)-next=tem;
就如我改的程序一样。
好像ywsbbdf
-
举人
四级
法也是一种改法,用的是引用,实际上跟指针的指针差不多,不过安全一点。不过引用一直理解起来比较难,不如指针的指针理解方便。
******************************************
第一次答复:
得用指针的指针
还有上面一处代码tem-data=NULL;应该是tem-next=NULL;
修改代码如下
#include
"stdio.h"
#include
"stdlib.h"
struct
Node{
int
data;
struct
Node
*next;
};
struct
Node
*createNode()
{struct
Node
*tem;
if((tem=(struct
Node*)malloc(sizeof(struct
Node)))==NULL)
{printf("error");
exit(1);
}
else{
tem-next=NULL;
}
return
tem;
}
void
createLine(struct
Node
**rear,int
item)
//指针的指针
{struct
Node
*tem;
if((tem=(struct
Node*)malloc(sizeof(struct
Node)))==NULL)
{printf("error");
exit(1);
}
tem-data=item;
printf("tem_addr=%x,tem_value=%d\n",tem,tem-data);
(*rear)-next=tem;
//这样才能赋值
(*rear)=tem;
printf("rear_add=%x,rear_value=%d\n",*rear,(*rear)-data);
}
main()
{struct
Node
*Node;
Node=createNode();
printf("1.--%d\n2.--%x\n3.--%x\n",Node-data,Node-data,Node);
createLine(Node,2);
//Node指针的地址
printf("after
createLine:\n\n1.--%d\n2.--%x\n3.--%x\n",Node-data,Node-data,Node);
system("pause");
}
举个例子吧:
#include stdio.h
//宏定义:
#define MAX(a,b) (ab) ? a : b
int main()
{
int x,y,max;
printf("input two numbers: ");
scanf("%d%d",x,y);
max = MAX(x,y);//调用宏
printf("max=%d\n",max);
}
答:scanf()的功能是从键盘获取数据赋值给对应的变量,括号内包括输入控制符和输入参数两部分。
从键盘输入的数据需要转化成输入控制符的格式数据,然后存入输入参数。
scanf("%3d",a);
是通过十进制整数3指定输入的宽度,即字符数,超出部分不赋值,故题中只把123赋值给a。
scanf("%3c",ch);
通常%3c可以用来读入三个连续的字符,由于这里ch是一个变量,而不是一个数组,所以只能放下一个字符,即题中将4作为一个字符型数据,赋值给ch变量。
超出的部分没有被保存,所以不显示。
如果有不懂的,可以继续提问。
1、函数如何定义,函数有什么分类,函数的基本语法知识,函数编写常见的错误。
2、记住一些常用的函数,其他的函数需要用到的时候查表就ok了。
c语言的函数知识其实不难(个人认为),难点在c语言的指针(指针是c语言的灵魂,学不好等于没学c语言)指针和数组、指针和函数、指针和结构体、动态内存分配等混合内容知识比较难,并且c语言循环控制一定要会。楼上所说的链表,需要学习数据结构这门课。
希望能帮助到楼主
#includestdio.h
#includemath.h
void f(int x)
{
int j=0,i;
double k;
k=sqrt(x);
for(i=2;ik;i++)
{
if(x%i==0)
j++;
}
if(j==0)
printf("%4d",x);
}
int g(int x)
{
int a,b,c;
a=x/100;
b=x%100/10;
c=x%10;
if(a*a*a+b*b*b+c*c*c==x)
return 1;
else
return 0;
}
void main()
{
int array[100],i,n=300;
for(i=0;i99;i++,n++)
array[i]=n;
for(i=0;i99;i++,n++)
printf("%4d,",array[i]);
printf("素数为:");
for(i=0;i99;i++,n++)
f(array[i]);
printf("水仙花数为:");
for(i=0;i99;i++,n++)
if(g(array[i])==1)
printf("%4d,",array[i]);
}
1、返回值是int,还有,你的指针概念不明确,这里稍微跟你讲一下,具体详细的还是看一下书吧
例如有如下定义:int * p;int a = 10;表示定义了一个int型的指针变量p和一个int型的变量a,并且a的值为10,使用时,要给p赋值,并且赋值应该是一个地址,即p = a;现在p的值就是a的地址,所以p就相当于a了,取出a的值就相当于取出p指向地址的值,所以*p就表示10这个值。
2、这里涉及到了强制类型转换,因为在fun2里的return 用了(int)把a+b的结果强制转化成了int型变量,例如:double a = 1.6; 执行了(int)a;之后,a的值就为1了,小数部分被省略。
3、fun(32,32)正确,而fun("abchina",32.0)不正确,在函数的形参里面定义的是一个char型和一个float型变量,而“abchina”是一个字符串,与函数中变量类型不同。