C学习代码05

//无字符串类型,字符串声明需要字符数组或指针
/*
以下:str是一个常量,其值不可以改变,但数组str的内容可以改变
ptr是变量,指一段内存空间,其值可以修改,但该指针指向空间中保存的字符串的值不可以改变
*/
int main(){
char str[] = {"hello"}; //大括号可以去掉
char *ptr = "Hello";
printf("%s,%s \n",str,ptr);
return 0;
}


//字符串输入输出(1)
//scanf("%s")会将空格作为读入结束,无法读取空格后的内容
//区别于scanf("%c"),%c是将空格作为字符读入
#define NAME 12
int main(){
char name[N];
printf("Enter you name:");
scanf("%s",name);
printf("%s\n",name);
printf("%d\n",sizeof(name));
return 0;
}




//字符串输入输出(2)
//此种方法输入的字符个数必须达到数组长度,回车作为字符读入
#define NAME 12
int main(){
char name[N];
printf("Enter you name:");
int i=0;
for(i=0;i<=N;i++){
scanf("%c",&name);
}
for(i=0;i<=N;i++){
printf("%c",name);
}
}




//字符串的其他输入输出方式
#include <stdio.h>
#define N 12
int main(){
char name[N];
printf("Input you name:");
//输入字符串,空格也会被读走,只有回车作为输入结束的标志
//gets()不能限制字符串长度,可能引起缓冲区溢出,scanf()可以限制长度,但仍有可能缓冲区溢出
gets(name);
//输出字符串,自动输出换行符,但不能在输出的字符串中添加其他字符信息,不能控制输出格式
puts(name);
return 0;
}


//安全的字符串输入方式
int main(){
char name[N];
printf("Enter you name:");
fgets(name,sizeof(name),stdin); //限制输入字符串长度不超过数组大小,自动输出换行
printf("%s\n",name);
return 0;
}


//结构体
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentId;
char studentName[10];
char studentSex;
DATE birthday;
int score[4];
}STUDENT;
int main(){
STUDENT stu1={2016305650,"hehe",'M',{1997,3,29},{23,442,44,55}};
STUDENT stu2;
stu2 = stu1; //此处,只有相同类型的结构体才可以相互赋值
//输出时,按数据项对应输出即可
printf("stu2:%10ld%8s%3c",stu2.studentId,stu2.studentName,stu2.studentSex);
return 0;
}




//结构体内属性,一一进行复制赋值


#include <stdio.h>
#include <string.h>
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long stuId;
char stuName[10];
char stuSex;
DATE birth;
int score[4];
}STUDENT;
int main(){
STUDENT stu1 = {2016305650,"hehe",'M',{1997,3,29},{23,442,44,55}};
STUDENT stu2;
stu2.stuId = stu1.stuId;
//注意此处赋值,不可stu2.stuName=stu1.stuName
//因为stuName[]是一个数字,数组名stuName表示此数组的首地址
strcpy(stu2.stuName,stu1.stuName);
printf("%ld %s\n",stu2.stuId,stu2.stuName);
return 0;
}


//函数参数为结构体指针变量
struct date
{
int year;
int month;
int day;
}d;
void Func(struct date *pt){
//->指向运算符,用于访问结构体的指针所指向的成员
//使用形式:指向结构体的指针变量名->成员名
pt->year = 2000;
pt->month = 12;
pt->day = 3;
}
int main(){
d.year = 1999;
d.month = 4;
d.day = 12;
//%02d,0为前导符,输出数据时,若左边有多余位则补0
printf("Before Func:%d/%02d/%02d\n",d.year,d.month,d.day);
Func(&d);
printf("After Func:%d/%02d/%02d\n",d.year,d.month,d.day);
return 0;
}


//共用体
union example;
/*
语法与struct相同,差别在二者内存空间的分配上,
struct由于计算机的内存对齐,struct所占内存通常比其内所有成员所占内存和要大
union中,各个成员同时只能有一个存在,所以其内存空间为多个成员所占内存空间较大的一个
*/

猜你喜欢

转载自blog.csdn.net/ivorybeach/article/details/79631125