指针和数组
#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;
}
结果
好了,敲的代码就这样了,大佬太多了,顶不住了啊,慢慢看,慢慢练习,代表自己还是在学习的哈。加油啊!!