#include <stdio.h>
/*
void test(int arr[])
{
int sz = sizeof(arr) / sizeof(arr[0]);//
printf("%d\n",sz);
}
int main()
{
int arr[10] = { 0 };
test(arr);//1/2 1-->x86 2-->x64
return 0;
}
*/
/*
int main()
{
char ch = 'w';
char* pc = &ch;
return 0;
}
*/
/*
int main()
{
char arr[] = "abcdef";
char* pc = arr;
printf("%s\n",arr);
printf("%s\n",pc);
return 0;
}
*/
/*
int main()
{
char* p = "abcdef";//"abcdef"是常量字符串
printf("%c\n",*p);//只打印了a
printf("%s\n",p);//abcdef
return 0;
}
*/
/*
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
char* p1 = "abcdef";//常量字符串
char* p2 = "abcdef";//常量字符串,在内存中不会改变,在内存中存的同样的地址
//if (arr1 == arr2)
//{
// printf("等于\n");
//}
//else
//{
// printf("不等于\n");//√
// //两个数组开辟的是不同的空间,故不相等
//}
if (p1 == p2)
{
printf("等于\n");
}
else
{
printf("不等于\n");
}
return 0;
}
*/
/*
int main()
{
int arr[10] = { 0 };//整形数组
char ch[5] = { 0 };//字符数组
int* parr[4];//存放整形指针的数组-->指针数组
char* pch[5];//存放字符指针的数组-->指针数组
return 0;
}
*/
/*
int main()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int* arr[4] = { &a,&b,&c,&d };
int i = 0;
for (i = 0; i < 4; i++)
{
printf("%d\n",*arr[i]);
}
return 0;
}
*/
/*
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 };
int* parr[] = { arr1,arr2,arr3 };//指针数组
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d ", *(parr[i] + j));
}
printf("\n");
}
//1 2 3 4 5
//2 3 4 5 6
//3 4 5 6 7
return 0;
}
*/
/*
int main()
{//数组指针--指针
int *p = NULL;//整形指针 --指向整形的指针 -- 可以存放整形的地址
char* pc = NULL;//pc是字符指针 --指向字符的指针 --可以存放字符的地址
//数组指针 --指向数组的指针 --存放数组的地址
int arr[10] = { 0 };
//arr -首元素的地址
//&arr[0]-首元素的地址
//&arr -数组的地址
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int (*p)[10] = &arr;
//p为数组指针,指向[10]的数组
return 0;
}
*/
/*
int main()
{
char*arr[5];
char* (*pa)[5] = &arr;
int arr2[10] = { 0 };
int (*pa2)[10] = &arr2;
return 0;
}
*/
/*
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*pa)[10] = &arr;
int* p = arr;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ",*(p+i));
}
//for (i = 0; i < 10; i++)
//{
// printf("%d ", *(*pa + i));
// //printf("%d\ ",(*pa)[i]);
//}
return 0;
}
*/
/*
void print1(int arr[3][5],int x,int y)
{
int i = 0;
int j = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
void print2(int (*p)[5], int x, int y)
{
int i = 0;
for (i = 0; i < x; i++)
{
int j = 0;
for (j = 0; j < y; j++)
{
printf("%d ", p[i][j]);//结果相同
printf("%d ", *(p[i] + j);
printf("%d ", *(*(p + i)) + j);
printf("%d ",(*(p+i))[j]);//p+i找到某行地址,加*解引用,[j]再访问某个元素
}
printf("\n");
}
}
int main()
{//常用形式,数组指针用在二维以上数组方便
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
print1(arr,3,5);//数组名 - 数组名就是首元素地址 - 把二维数组想象成一维数组即把三行看成三个元素
//首元素为第一行的地址,传入下部print2为一维5元素数组
print2(arr,3,5);
return 0;
}
*/
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int* p = arr;
for (i = 0; i < 10; i++)
{
printf("%d ",*(p+i));
printf("%d ",*(arr+i));
printf("%d ",arr[i]);//arr[i]==*(arr+i)=*(p+i)==p[i]
printf("%d ",p[i]);
}
return 0;
}