指针
- C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。
#include<stdio.h>
int main()
{
int a=2,b=6,c=10,d=8,e=4;
//取地址运算符
int *pa=&a;
int *pb=&b;
int *pc=&c;
int *pd=&d;
int *pe=&e;
printf("%#X %#X %#X %#X %#X\n",pa,pb,pc,pd,pe);
//取值运算符
printf("%d %d %d %d %d\n",*pa,*pb,*pc,*pd,*pe);
return 0;
}
- 指针访问数组
#include<stdio.h>
//下标法
/*
int main()
{
int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
for(int i=0;i<12;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
*/
//本质偏移法
/*
int main()
{
int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
for(int i=0;i<12;i++)
{
printf("%d\n",*(a+i));
}
return 0;
}
*/
//指针法
int main()
{
int a[12]={2,3,6,5,8,0,9,4,1,7,11,20};
int *p=a;
for(int i=0;i<12;i++)
printf("%d\n",p[i]);
for(int j=0;j<12;j++)
{
printf("%d\n",*(p+j));
}
for(int x=0;x<12;x++)
printf("%d\n",*p++);
return 0;
}
//二维数组
//下标法
/*
int main()
{
int a[3][4]={2,5,4,8,9,1,3,7,6,10,12,21};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
return 0;
}
*/
/*
int main()
{
int a[3][4]={2,5,4,8,9,1,3,7,6,10,12,21};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d\t",*(*(a+i)+j));
}
printf("\n");
}
return 0;
}
*/
结构体
- 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
- 结构体初始化
#include<stdio.h>
#include<string.h>
struct stu
{
char *name; //char name[10];
int num;
char sex;
float score;
};
int main()
{
//方法一:定义时赋值
//struct stu s={"fangwei",1001,'m',99};
//方法二:定义后逐个赋值
/*
struct stu s;
s.name="fangwei"; //strcpy(s.name,"fangwei");
s.num=1001;
s.sex='m';
s.score=99;
*/
//指定赋值
struct stu s={.name="fangwei",.num=1001,.sex='m',.score=99};
printf("name:%s\n",s.name);
printf("num:%d\n",s.num);
printf("sex:%c\n",s.sex);
printf("score:%.1f\n",s.score);
return 0;
}
- 结构体嵌套
#include<stdio.h>
int main()
{
struct time
{
int hour;
int min;
int sec;
};
struct stu
{
char name[30];
int num;
float score;
struct time TIME;
};
struct stu STU={"fangwei",1001,99,{13,23,44}};
printf("STU.name=%s\n",STU.name);
printf("num=%d\n",STU.num);
printf("score=%f\n",STU.score);
printf("hour=%d\n",STU.TIME.hour);
printf("min=%d\n",STU.TIME.min);
printf("sec=%d\n",STU.TIME.sec);
return 0;
}
- 结构体数组遍历
#include<stdio.h>
int main()
{
struct stu
{
char *name; //char name[20];
int num;
char sex;
float score;
}s[4]={{"tangseng",1001,'m',99},{"wukong",1002,'m',88},{"bajie",1003,'m',44},{"sha",1004,'m',66}};
/*ef struct stu
{
char *name; //char name[20];
int num;
char sex;
float score;
}Stu;
Stu s[4]={{"tangseng",1001,'m',99},{"wukong",1002,'m',88},{"bajie",1003,'m',44},{"sha",1004,'m',66}};
*/
for(int i=0;i<4;i++)
{
printf("num: %d\n",s[i].num);
printf("sex: %c\n",s[i].sex);
printf("score:%f\n",s[i].score);
printf("\n");
}
return 0;
}
- 利用结构体,实现投票功能
#include<stdio.h>
#include<string.h>
typedef struct pe
{
char name[30];
int votecount;
}candidate;
void vote(candidate * c,int n)
{
for(int i=0;i<3;i++)
{
printf("name:%s votecount:%d\n",c[i].name,c[i].votecount);
}
}
int main()
{
candidate can[3]=
{
{"wang",0},
{"fang",0},
{"tao",0},
};
int count=0;
char Name[1000];
for(int j=0;j<10;j++)
{
printf("请输入你要投的人:");
scanf("%s",Name);
int flag=1;
for(int i=0;i<3;i++)
{
if(strcmp(Name,can[i].name)==0)
{
can[i].votecount++;
flag=0;
}
}
if(flag==1)
{
count++;
}
}
vote(can,3);
printf("弃权票:%d\n",count);
int max=can[0].votecount;
int idx;
for(int i=1;i<3;i++)
{
if(max<can[i].votecount)
{
max=can[i].votecount;
idx=i;
}
}
printf("%s获胜!\n",can[idx].name);
return 0;
}
来源:CSDN
作者:kyle-fang
链接:https://blog.csdn.net/fangweijiex/article/details/103652790