5.
//int main()
//{
// int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 8 };
// int *p = &a[0][0];
// int i, j;
// //for (i = 0; i < 3 * 4; ++i)//看二维数组不方便
// // printf("%d", *(p+i));
// for (i = 0; i < 3; ++i)
// {
// for (j = 0; j < 4; ++j)
// {
// printf("%d", *(p + i * 4 + j));//单指针指向二维数组
// }
// printf("\n");
// }
// system("pause");
// return 0;
//}
//6.
//char a[] = { '1', '2', '3', '4', '5' };
//字符数组不一定要有结束符, 字符串一定要有结束符
//char b[5] = "12345"; 越界
//char b[5] = "1234"; 有\0, 没有越界
//strlen(b)比5大, 没意义
//char a[] = "123"; 把字符串"123"放在a开辟的4个空间里
//char *p = "123"; p指向字符串首元素地址, 也就是1的地址
//char *p;
//p = "123"; 可以,数组不可以这样初始化
7.笔试题
int main()
{
char a[] = "123";
char b[] = "123";
const char c[] = "123";
const char d[] = "123";
char *p = "123";
char *q = "123";
const char *pp = "123";
const char *qq = "123";
if (a == b)
printf("a==b\n");
if (c == d)
printf("c==d\n");
if (p == q)
printf("p==q\n");
if (pp ==qq)
printf("qq==pp\n");
if (p == pp)
printf("p==pp\n");
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
//1.
//int main()
//{
// int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 6 };// 二维数组名a是 int(*p)[4] 类型
// int(*p)[4];
// int i, j;
// p = a;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 4; j++)
// {
// printf("%d", *(*(p + i) + j));
// }
// printf("\n");
// }
//注意指针变量的当前值
//for (p = a; p < a + 3; p++)//比二维数组名多一个操作可以自加,数组名不可以自加
//{
// for (j = 0; j < 4; j++)
// {
// printf("%d", *(*p + j));
// }
// printf("\n");
//}
//
// system("pause");
// return 0;
//
//}
//2. 数组传参数
//void output(int arr[][4]){}
//void output(int(*p)[4]){}
//
//int main()
//{
// int arr[3][4] = { 1, 4, 2, 3, 5, 6, 7, 8, 9, 0, 9, 8 };
// output(arr);
// system("pause");
// return 0;
//}
//3.变指向来实现交换
//int main()
//{
// char *tmp = NULL;
// char *p = "111";
// char *q = "222";
// tmp = p;
// p = q;
// q = tmp;
// printf("%s,%s\n", p, q);//%s
// system("pause");
// return 0;
//}
//4.
//void test(int a[100])// int * 类型
//{
// printf("%d\n", sizeof(a));//4
//}
//
//int main()
//{
// int a[100];
// printf("%d\n", sizeof(a));//400
// test(a);//传首地址
// system("pause");
// return 0;
//}
// 二级指针
//int main()
//{
// int a = 5;
// int *p = &a;
// int **q = &p;
// printf("%d %d %d\n", a, *p, **q);
// system("pause");
// return 0;
//}
//5.
//int main()
//{
// int a[5] = { 1, 2, 3, 4, 5 };
// int *q[5] = { &a[0], &a[1], &a[2], &a[3], &a[4] };
// for (int i = 0; i < 5; i++)
// {
// printf("%2d", **(q + i));
// }
// system("pause");
// return 0;
//}
//6 指针类型不一样,加1就不一样
int main()
{
int a = 6;
int *p = &a;
printf("%p\n", p);
printf("%p\n", p+1);//加4个字节
printf("%p\n", (unsigned long)p + 0x1);//加数字 1
printf("%p\n", (short *)p + 0x1);//加 2个字节
system("pause");
return 0;
}