1.题目:
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node*next;
}linklist;
linklist *CreatListR(int n){
int i,m;
linklist *head,*s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
for(i=0;i<n;i++){
s=(linklist*)malloc(sizeof(linklist));
scanf("%d",&m);
s->data=m;
r->next=s;
r=s; }
r->next=NULL;
return head;}
int main(){
int n;
scanf("%d",&n);
if(n<=0) return 0;
linklist *s;
s=CreatListR(n);
s=s->next;
printf("%d",s->data);
while(s->next!=NULL){
s=s->next;
printf(" %d",s->data);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>表示一个头文件,包含了一些输入和输出的函数
#include<stdlib.h>表示一个头文件,提供了一系列的通用函数,如内存分配、随机数生成、程序终止等
如下是一些其他的头文件。
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include <iomanip.h> //参数化输入/输出
#include <iostream.h> //数据流输入/输出
#include <limits.h> //定义各种数据类型最值常量
#include <locale.h> //定义本地化函数
#include <math.h> //定义数学函数
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h> //定义杂项函数及内存分配函数
#include <string.h> //字符串处理
#include <strstrea.h> //基于数组的输入/输出
#include <time.h> //定义关于时间的函数
#include <wchar.h> //宽字符处理及输入/输出
#include <wctype.h> //宽字符分类
接下来看下面的代码
typedef struct node{
int data;
struct node*next;
}linklist;
typedef 定义新类型:typede int Name //typede 类型 别名(就是把int换了个名字变成Name)
#include <iostream>
using namespace std;
typedef int Name; //Name = int
int main()
{
Name a;//int a
a=100;
cout<<a<<endl;
}
结构体的注意事项:
结构类型 结构变量,是两个不一样的东西。
int a=10;
struct student stu;
struct student stu={233,'boy'};
printf{"%d,%c",stu.ID,stu.name};
#include <stdio.h>
struct student{
int ID;
char name;
}
int main(){
int ID=666;
struct student stu={233,'boy'};
printf{"%d,%c",stu.ID,stu.name};
return 0;
}
struct student{
int ID;
char name;}struct student stu
#include <stdio.h>
struct student{
int ID;
char name;
struct teacher{
in age
}th
}
}
int main(){
int ID=666;
struct student stu
stu.ID=233;
stu.name=boy;
stu.th.age=6
return 0;
}
struct student{
int ID;
char name;
}stu
#include <stdio.h>
struct student{
int ID;
char name;
}stu
}
int main(){
int ID=666;
stu.ID=233;
stu.name=boy;
stu.th.age=6
return 0;
}
typedef struct student{
int ID;
char name;
}stu
#include <stdio.h>
typedef struct student{
int ID;
char name;
}stu
}
int main(){
stu sst={22,'aa'};
return 0;
}
结构体指针
stu sst={22,'aa'};
stu* pst=&sst;
pst->ID=66;
#include <stdio.h>
typedef struct student{
int ID;
char name;
}stu
}
int main(){
stu sst={22,'aa'};
stu* pst=&sst;
pst->ID=66;
return 0;
}
结构体数组
#include <stdio.h>
struct student{
int ID;
char name;
}stu[10]
}
int main(){
stu[0].ID=1;
stu[0].name=a;
stu[0].ID=66;
return 0;
}
&:取地址运算符(用来获取变量的地址)
* :间接运算符(用来获取某地址对应的值)
int *ptr:变量类型 *变量名
int main{
int number=5;
int value=*(&number);
printf("%p",&number);//输出number地址
printf("%d",number);//5
printf("%d",value);//5
return 0;
}
int mian{
int number=5;
int *ptr=&number;//将ptr指向number,赋值number的地址
printf("%p",&number);//number的地址,number的地址
printf("%d",number);//number的值,5
printf("%p",&ptr);//ptr的地址,ptr的地址
printf("%p",ptr);//ptr的值,number的地址
printf("%d",*ptr);//ptr指向的变量的值,5
return 0;
}
单链表
#include<stdio.h>
struct ListNode{
int val;
struct ListNode *next;
};
int main(){
struct ListNode a,b,c;
a.val=1;
b.val=2;
c.val=3;
a.next=&b;
b.next=&c;
c.next=NULL;
struct ListNode *head=&a;
while(head){
printf("%d,%p,%p",head->val,head,head->next);
head=head->next;
}
return 0;
}
while语句:
while(循环条件){
循环语句; }
int i=1;
int sum=0;
while(i<=100)
{
sum+=i;
i++;
}
cout<<sum<<endl;
//计算1到100的所有和
int i=1;
int sum=0;
while(i<=100)
{
if(i==50)
break;//到这里就停止了,1到50
sum+=i;
i++;
}
cout<<sum<<endl;
int i=1;
int sum=0;
while(i<=100)
{
if(i==50)
continue;//死循环,不断的i=50
sum+=i;
i++;
}
cout<<sum<<endl;
函数指针与指针函数:()的优先级大于*
int *f(int x,int y);//指针函数,首先是一个函数,返回一个指针
int (*f)(int x,int y);//函数指针,首先f为一个指针,指向一个函数
函数指针:
int add(int x,int y){
return x+y;
}
int (*f)(int x,int y);
int main(){
f=&add;
printf("%d",(*f)(1,2));
return 1;
}
指针函数:
int c;
int* add(int x,int y){
c=x+y;
return &c;
}
mallloc() 动态分配内存:好处是可以与free()一起使用提前释放内存,不需要等到程序运行结束后再释放内存。
# include <stdio.h>
# include <malloc.h>
int main(void)
{
int i = 5; //分配了4个字节 静态分配
int * p = (int *)malloc(sizeof(4));//指针变量p为静态分配,malloc开辟的空间为动态分配,也可以用sizeof(int)交给系统判断申请的内存块长度,(int*)指明类型
*p = 5; //*p 代表的就是一个int变量,指针变量p表示是一个以int类型的地址为内容的变量
free(p); //freep(p)表示把p所指向的内存给释放掉,p本身的内存是静态的,不能由程序员手动释放
//p本身的内存只能在p变量所在的函数运行终止时由系统自动释放
return 0;
}