可以看到p/p1与p2相差为4
#include<stdio.h> int main(void) { int buf[10]; int *p = buf; int *p1 = &buf[0]; int *p2 = &buf[1]; printf("%d,%d,%d\n",p,p1,p2); //可以看到p/p1与p2相差为4 system("pause"); return 0; } #include<stdio.h> int main(void) { int buf[10]; int *p = buf; int *p1 = &buf[0]; int *p2 = &buf[1]; printf("%d,%d,%d\n",p,p1,p2); //可以看到p/p1与p2相差为4 p++; printf("%d\n",p);//指针运算不是简单的整数加减法,而是指针指向的数据类型在内存中占用字节数 p += 3; //加的不仅仅是3,而是字节数加3*4 = 12,也就是相差12个 printf("%d\n", p); // ------------------------- int *pp1 = &buf[0]; int *pp2 = &buf[2]; printf("%d\n",pp2-pp1);//两个指针相减可以得到两个数组元素的相对距离 system("pause"); return 0; }利用指针求出数组中最大的元素 先用数组实现
#include<stdio.h> int max_res(int arr[10]) { //for (int i = 0; i < 10;i++) //printf("%d ",*p++); int value = 0; int i; for (i = 0; i < 10; i++) { if (value < arr[i]) value = arr[i]; } return value; } int main(void) { int buf[10] = {12,34,45,32,46,78,65,43,23,71}; int len = 0; //int *p = buf; //while (*p) //{ // //printf("buf=%d",buf); // p++; //} printf("before:"); for (int i = 0; i < 10;i++) printf("%d ", buf[i]); printf("\n"); printf("len = %d\n",len); //int *p; //p = buf; //int max = 0; //max = max_res(buf,len); int max = 0; max = max_res(buf); printf("max=%d\n",max); system("pause"); return 0; }数组逆序输出字符
void nixu(int arr[10]) { int low = 0; int high = 9; while (low < high) { int temp = arr[low]; arr[low] = arr[high]; arr[high] = temp; low++; high--; } for (int i = 0; i < 10;i++) printf("%d ",arr[i]); }求数组中第二大元素,要求不能排序后获得 子函数如下: 思路讲解: 定义一个max,一个smax 把s[0],s[1]中大的给max,小的给smax。 然后在进行比较,比较的时候需要注意,需要从s[2]开始,因为前面两个已经被使用了。 首先我们已经默认max大于smax了,所以后面的情况只有3种 1 后面的都比smax,max小 2 后面的最大的比max大 3 后面的最大的在smax和max中 因此,基于这些就可以进行判断了。
int smax(int s[])//求数组中第二大元素 { int max = 0; int smax = 0; if (s[0] > s[1]) { max = s[0]; smax = s[1]; } else { smax = s[0]; max = s[1]; }//将max等于s[0],s[1]中那个元素的值 int i; for (i = 2; i < 10; i++) { if (max < s[i]) { smax = max; max = s[i]; } else if(max>s[i]&&s[i]>smax) { smax = s[i]; } } return smax; }