第十一天 指针和数组以及结构体

指针和数组

#include <stdio.h>
int main(){
	int i;
	int arr[]={123,2,3,4,5,6,7,8,9,10};

	//数组名时数组的首地址 是一个常量
	//printf("%p\n",&arr[0]);
	//printf("%p\n",arr);
//在将数组赋值给指针变量时 不需要取地址操作 本身就是地址
	int* p;
	p = arr;
	//printf("%d\n",arr[1]);
	
	//通过指针间接操作数组
	//printf("%d\n",p[0]);

	//指针+1指向数组的下一个元素
	//int* 指针+1 内存地址相当于 *sizeof(int);
	//printf("%d\n",*(p+1));

	for(i=0;i<10;i++){
		//printf("%d\n",p[i]);

		printf("%d\n",*(p+i));//指针加上偏移量
	}

	return 0;
}

结果在这里插入图片描述

练习看看

#include <stdio.h>
int main(){
	int step;
	int* p;
	int arr[]={123,234,3,4,5,6,7,8,9,10};

	//p=arr;
	p=&arr[3];

	//指针减法操作
	//两个指针相减 会得到一个偏移量(步长)

	step = p-arr;
	printf("%d\n",step);//4-1=3;...区间自个摸索。
	return 0;
}

结果
在这里插入图片描述

练练2

#include <stdio.h>
int main(){
	int step;
	char ch[]="hello world";

	char* p=&ch[4];

	step = p-ch;
	printf("%d\n",step);
	return 0;
}

结果
在这里插入图片描述

指针数组

#include <stdio.h>
int main(){
	int i;
	int a= 10;//0xff00
	int b=20;//0xff04
	int c=30;//0xff08
	//指针数组 指针类型的数组
	int* arr[3]={&a,&b,&c};//arr[0]->0xff00
	//指针数组存储指针变量

	*arr[2]=123;

	for(i=0;i<3;i++){
		printf("%d\n",*arr[i]);
	}
	return 0;
}

在这里插入图片描述

多级指针

#include <stdio.h>
int main(){
	int a=10;
	int b=20;
	//使用一级指针接受变量地址
	int* p = &a;
	int* q = &b;
	//*p=123;//间接改变变量的值
	//使用二级指针接受一级指针的地址
	int** p1 =&p;

	*p1 = q;//间接改变一级指针的值
	**p1 =123;//二级指针间接改变变量的值
	//三级指针
	//int*** p2 = &p1;

	//四级指针
	//int**** p3 = &p2;
	//return 0;
//因为没有可以运行的内容,知道即可,有这么一种东西的存在即可
}

和上面的结果一样,没有运行结果在这里插入图片描述
知道即可

typedef语句

#include <stdio.h>
//tepedef是为已存在的书类型起别名
typedef unsigned int ui;
typedef unsigned long ul;
int main(){
	//在定义数据时 需要声明数据类型
	//int a=10;
	//无符号整型变量
	//unsigned int a = 10;
	ui a=10;
	ul b=123;
	printf("%d\n",a);
	printf("%d\n",b);
	return 0;
}

结果在这里插入图片描述

结构体定义和使用

#include <stdio.h>
#include <string.h>

//结构体在定义时相当于约束了一个规则
//结构体定义格式
//结构体  结构体名称
//{
//结构体成员列表 (可以是不同数据类型  基本类型 构造类型 指针类型)
//};

//定义学生结构体信息 存储数据
struct stu//结构体名称
{
	// 编号 int  姓名 char数组 性别 char  成绩 int 年龄 int  地址 char数组

	int id;
	char name[21];//一个中文是两个字符
	char sex;
	int age;
	int score;
	char addr[55];
};

int main(void)
{
	//定义结构体变量
	//数据类型  (struct stu)
	//按照结构体成员列表顺序依次初始化数据
	struct stu ss = {10,"K",'F',18,101,"花果山水帘洞"};


	//修改结构体成员信息
	ss.id=100;
	//ss.name是数组首地址 数组首地址是一个常量 不可以赋值
	//ss.name="播妞"//错误
	//字符串拷贝  strcpy(目标字符串,源字符串)
	strcpy(ss.name,"K");

	//打印结构体信息

	//结构体变量.成员
	printf("编号:%d\n",ss.id);
	printf("姓名:%s\n",ss.name);
	printf("性别:%s\n",ss.sex=='M'?"男":"女");
	//三目运算符
	printf("年龄:%d\n",ss.age);
	printf("成绩:%d\n",ss.score);
	printf("地址:%s\n",ss.addr);

	return 0;
}

结果在这里插入图片描述
好了,敲的代码就这样了,大佬太多了,顶不住了啊,慢慢看,慢慢练习,代表自己还是在学习的哈。加油啊!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值