/*
复习
1.指针类型 int *
指针类型
指针指向的变量类型
指针指向哪个变量
2.基本数据类型 4种
指针类型 存放的地址 和系统有关系 4个字节
数组类型
结构体 枚举 联合
3.指针加法减法 p++ 和数组搭配使用
4.两个运算符 *取值(解引用) &取地址
5. *(p+i) p[i] (p是指针 i是整型)
p[i]的地址 &p[i] p+i
*/
#include<stdio.h>
#include<string.h>
int win;//全局变量
int main()
{
//1.复习
//int* p;//int *p;int * p;没有任何区别
int* p, *q;//定义两个指针 指针前面要记得单独加*
char chArr[] = "helloworld";//字符数组 存放字符串 栈区
char *pArr = "helloworld";//指针 字符串存放在常量区 ,指针指向它存放的首地址 字符串不能(不可以被修改)
//代码区 全局数据区(常量区) 堆区 栈区
/*
数组输出 除了字符数组
字符数组 \0作为结尾
printf("%s",chArr);//用printf输出
%s 输出这个地址和地址后的所有字符 直到遇到\0为止
scanf("%s",chArr);//数组名就是数组首地址 数组第一个元素的地址
*/
//相同点
puts(chArr);//都可以用来打印printf strcmp strlen
puts(pArr);
//不同点 pArr不能用于输入
//gets(chArr);
//gets(pArr);//不可以修改内容
//strcpy strcat strlen 字符串的函数
//strcpy(pArr, chArr);//不可以修改常量区
//2.指针的加加 ++ 指针加1
// 指针++的时候同时解引用
int iArr[10] = { 0 };
int iBrr[10] = { 0 };
p = iArr, q = iBrr;
//*p++; (*p)++;
printf("*p=%d,p=%p\n", *p, p);
//*p++;
*p++=5; //先给*p赋值 然后p++ 等价*p=5,p++
printf("*p=%d,p=%p\n", *p, p);
printf("*q=%d,q=%p\n", *q, q);
(*q)++;
printf("*q=%d,q=%p\n", *q,q);
/*
*p++ p加了1
(*p)++ p指向的内容 加了1
*(p++) 和*p++没有区别//课后自己试试
* 后++ 取值 p++ 都是操作指针
*p++
(*p)++ 对*p进++ 指向的变量进行++
今天的作业题目 测试作用
*++p
++*p
附加题(可以不做) 测试二级指针和数组指针加1之后的地址偏移
*/
//3.指针和数组 (理论)
/*
指针加1 偏移一个数据的长度
数组同样可以看成一个类型 int arr[10]
arr -->大小 存数据 地址
*/
int idArr[5][10];//二维数组
//p = idArr;//类型不一致
//方案1
//p = &idArr[0][0]; //赋值数组第一个元素地址
//for (int i = 0; i < 5 * 10; i++)//用指针给数组赋值
//{
// *p = i;
// p++;
// //*p++ = i;
//}
//方案2
//数组指针 指针指向整个数组
//int (*pd)[10]=idArr;
int(*pd)[10];//定义一个数组指针
//pd= idArr;
pd = &idArr[0];//赋值
for (int i = 0; i < 5; i++)//用数组指针给他赋值
{
for (int j = 0; j < 10; j++)
{
pd[i][j] = i*j;//使用
}
}
/*
pd[i][j] (*(p+i))[j] *(p[i]+j) *(*(p+i)+j)等价
*pd[3] ==>*((pd[3])+0)
*/
//数组指针和指针数组
int(*point)[10];//数组指针 指向数组的指针
int *parr[10];//指针数组 int* parr[10] 指针数组 10个int* 10个元素都是指针
//二级指针 指针保存的是一个一级指针的地址 用到二级指针
int **pp;
pp= &p;//p是一级指针 pp保存一级指针地址
pp = parr;//指针数组名
pp = &parr[0];//parr[0]是一个一级指针
for (int i = 0; i < 5; i++)//循环打印
{
for (int j = 0; j < 10; j++)
{
printf("%d\t", idArr[i][j]);
}
printf("\n");
}
getchar();
return 0;
}