数组
1.0 数组定义
1.1 无初始值:int arr[10]; //局部变量如果没有赋值则随机。全局或静态变量则系统初始化为0.
1.2 有初始值:int arr[10]={10,20,30}; //没有赋值的补0
char arr[20] = ''hello world"; //没有赋值的补0 0的ascll为'\0'
char arr[10] = {'10' , '20'};
2.0 数组引用
int arr[10]={10 , 20 };
int a = arr[0]; // a=10
考虑: int (*p)[4] ; int arr[5][5];
p = arr;
结构体:
struct std
{
char[10] name;
int age ;
char sex ;
}
1.0 初始化赋值
方法一
struct std aa = {"xiao ming" , 10 , 1};
方法二
struct std aa;
strcpy(aa.name,"xiao ming");
aa.age = 10 ;
aa.sex = 1;
对比
对比着上面的定义来看C语言数组,数组作为一个函数的参数传递时,退化成一个指针; 同时,数组无法作为函数的返回值; 也许让数组更不服气的是,数组之间不能直接赋值操作,
- 数组作为一个函数的参数传递时,退化为一个指针。
- 数组无法作为函数的返回值
- 数组之间不能直接赋值操作
- 1 结构体可以作为函数参数
- 2 结构体可以作为返回值
- 3 结构体可以赋值
但是如果数组包装在结构体中,那么就能进行赋值了
#include<stdio.h>
struct student
{
char name[10];
int age;
char sex;
};
typedef struct
{
char name[10];
}char_t;
//利用结构体封装数组,实现数组的输入
char_t out_put_arr(char_t arr) //结构体内部有数组
{
char_t new_arr;
new_arr = arr ; //结构体赋值
return new_arr; //结构体返回
}
void main()
{
struct student da ,xin={"xin ming" , 10 , 1};
da = xin;
printf("xin_name = %s\n" , xin.name);
printf("da_name = %s\n" , da.name);
char_t new , old={"I am old"};
new = out_put_arr(old);
printf("new = %s\n" , new.name);
}
//输出
/*
xin_name = xin ming
da_name = xin ming
new = I am old
*/