程序的调试的作用:
跟踪CPU执行代码的步骤
监视变量的值在程序执行的时候是如何变化的
do-while 和 while
在实际的开发中, do-while比较少用
因为就算循环无论如何要至少执行一次的时候,while也可以搞定
循环的情况一共就两种:
1.循环次数确定的循环
2.循环次数不确定的循环,但是确定了循环继续活着结束的条件
对于一个一位数组来说
1.获取 a[i]的地址的几种方法
1 &a[i] // 取地址符
1 a+i // 数组名就是数组首地址
1 int *p = a; 2 p+i; // 指针法
2.获取 a[i]的值的几种方法
(1) a[i]
(2) *(a+i)
(3) int *p = a;
*(p+i);
(4) *(&a[i])
若一个数组的元素值为指针,则这个数组可以称之为 指针数组
指针数组是一组有序的指针的集合.
所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量.
一般声明形式:
1 int *array[10];
使用:
1 int a = 3, b = 4, c = 5; 2 int *pa[3] = {&a, &b, &c};
其中
pa[0] a的地址
pa 数组的首地址 = &pa[0]
头脑风暴
1 int arr[2][2] = {1,2,3,4}; 2 int *pa[2] = {arr[0], arr[1]}; 3 4 printf("arr[0][0] = %p\n", &arr[0][0]); 5 //arr[0][0]的地址,arr的首地址 6 printf("arr[0][0] = %d\n", arr[0][0]); 7 //arr[0][0]的值 8 printf("pa[0] = %p\n", pa[0]); 9 //pa[0]的值,即指针pa[0]所指向的地址,所存放的地址 10 printf("*pa[0] = %d\n", *pa[0]); 11 //pa[0]所指向的地址的内容 12 printf("**pa = %d\n", **pa); 13 //指针数组pa的首地址(即pa[0]的地址)对应的值--即pa[0]存放的内容--即arr[0]的地址所对应的值 14 printf("**(pa+1) = %d\n", **(pa+1)); 15 //指针数组pa的首地址+1(非数量1,地址意义上的1)(即pa[1]的地址)对应的值--即pa[1]存放的内容--即arr[1]的地址所对应的值
1 int a = 3, b = 4, c = 5, d = 6; 2 int *pa[4] = {&a, &b, &c, &d}; 3 4 printf("a = %d\n", a); 5 //a的内容 6 printf("&a = %p\n", &a); 7 //a的地址 8 printf("pa = %p\n", pa); 9 //数组的首地址, &pa[0] 10 printf("pa[0] = %p\n", pa[0]); 11 //数组的第1个元素, a的地址 12 printf("*pa[0] = %d\n", *pa[0]); 13 //数组的第1一个元素所指向的内存地址所对应的内容 14 printf("*(&a) = %d\n", *(&a)); 15 //a的内容 16 printf("**pa = %d\n", **pa); 17 //a的内容
指针变量之间的算术运算
注意: 只有指向同一数组的两个指针变量之间才能进行运算,否则运算毫无意义
实质是地址之间在进行运算!
(pointer2地址值-pointer1地址值)/sizeof(数据类型)
用法:
1.判断两个指针变量指向的元素是否连续
2.判断两个指针变量之间相隔几个元素
例:
1 int a[5] = {1,2,3,4,5} 2 int *p = a; 3 int *p1 = &a[3]
时间: 2024-10-10 08:52:07