一、 数组
数组使用注意:
1. 数组在声明和初始化时,具体要注意的主要是初始化的时候,如果使用变量作为数组的个数的参数,那么就不能直接在后面初始化,如下代码所示:
int count = 3;
int array[] = {1, 2, 3};
int c[5];
int a1[count];
a1[0] = 8;
int a1[count] = {1, 2, 3}; //这句是不正确的,可以使用int a1[count] 进行声明,但不能赋值
#define count 3
int a1[count]= {1, 2, 3}; //利用宏定义这样写是正确的
2.计算数组的长度的代码如下:
int count = sizeof(array)/sizeof(int);
// array 为数组名称 ,后面的 int 类型根据array 数组的实际类型进行更改
二、 字符串
1. 字符串输出时,只有遇到\n 才会输出:比如如下的代码
char c1[] = "test";
char c2[] = {'L','P'};
printf("%s\n", &c2[1]);
c1 和 c2 在内存中的存储如下图所示,当内存给变量分配空间时,是从较大的地址开始分配的:
所以上述代码在输出是输出的结果为:Ptest 。
三、 指针
1.利用指针指向数组时,我们可以使用三种方式来访问数组,例如:
int array[5];
int *p = array;
那么我们访问数组array中元素的方式可以为:
(1).array[i]
(2).p[i]
(3).*(p + i) // 此处加i访问第i个元素的方式,是根据array数组的类型,不同的指针类型对应不同的指针量的改变。例如:int *p = array,那么 *(p + 1) 表示的就是数组array的首地址 +4 字节 的位置的值
2.指针指向字符串
char *c = "test";
<span style="font-size:14px;"> char *name;
scanf("%s", name);
printf("%s \n", name);</span>
下面的例子定义了一个函数指针 指向了上面例子中的函数printfBinary(int),函数指针的调用有两种方法如下:
void (*putBianry)(int);
putBianry = printfBinary;
putBianry(10);
(*putBianry)(10);
四、 结构体和枚举
1.结构体的声明和定义结构体变量
//结构体变量的定义和赋值
struct Person p1 = {"tom", 12};
p1.age = 13;
struct
{
char *name;
int age;
} p2;
struct Person
{
char *name;
int age;
} p3;<span style="font-size: 11px;">
</span>
struct Person *p1;
(*p1).age = 13;
p1->name = "jim";
//类型定义
enum Week
{
monday,
tuesday,
wensday,
thursday,
friday,
saturday,
sunday
};
//变量定义
enum week w = tuesday;