13.1宏定义和枚举
#include<stdio.h>
#define PI 3.14 //宏定义
int main(void)
{
//定义枚举,没给数值的变量从给数值的变量往后依次+1
enum DAY
{
MON = 1, TUE, WED = 20,THU,FRI,SAT,SUN
};
enum GENDER
{
MALE = 5, FEMALE
};
//使用枚举
enum DAY day = THU;
printf("%d", day);
return 0;
}
14.1 指针
若定义指针而没规定指向谁是就会变为野指针,也就是随意指向,而不是变为空指针。?
#include<stdio.h>
int main(void)
{
int* ptr = NULL; //空指针
printf("ptr = %p\n", ptr);
int* pl; //野指针 程序会报错,尽量避免
//程序这时会随机分配,防止空指针的产生异常
//是没有意义的指向
printf("pl = %p", pl);
int sun_flower = 100;
//定义指针通常直接把它所指向的值也给了
int* p = &sun_flower;
//变量类型为int*类型,即整形指针类型,变量名为p
printf("sun_flower address = %p\n", &sun_flower);//%p指的是输出地址
printf("p = %p\n", p);//p本身就是一个地址,所以不用取地址符号
printf("拿到sun_flower的真实数据:%d\n", sun_flower);
printf("通过指针(快捷方式)拿到sun_flower的值:%d\n", *p);
//*p表示p中的数据,即p所指向的地址中存放的数据
return 0;
}
数组名本身就代表着数组的地址
#include<stdio.h>
int main(void)
{
int var[] = { 10,100,200 };
printf("var 的地址:%p\n", &var);
printf("var 的地址:%p\n", var);
//上两条语句结果相同,数组名本身就代表着数组的地址,但对于变量不是
//数组名的地址是数组元素的首地址
int number = 100;
int* p = var; //数组名代表了数组元素的首地址
p = &number; //给p赋予新的地址
printf("number 的地址:%p\n", &number);
printf("number 的地址:%p\n", p);
return 0;
}
15.1 字符串?
#include<stdio.h>
int main(void)
{
char greeting_1[6] = { 'H','e','l','l','o' };
char greeting_2[6] = { 'H','e','l','l','o','\0' };
char greeting_3[6] = "Hello";
//三行代码功能相同
//c语言在给数组分配空间时,在最后一个元素后面还会在预留一个地址空间
for (int i = 0; i < 6; i++)
{
printf("%c", greeting_2[i]);
}
return 0;
}
#include<stdio.h>
int main(void)
{
char* p = "Hello";
printf("p = %s", p); //直接用指针输出字符串
return 0;
}
#include<stdio.h>
int main(void)
{
const char* names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};//为啥用const
for (int i = 0; i < 4; i++) {
printf("Value of names[%d] = %s\n", i, names[i]);
}
}
|