指针和数组

来源:互联网 发布:jy零食淘宝店网址 编辑:程序博客网 时间:2024/05/21 10:26

  • 从0到1,回归基础,夯实基础
    点滴积累,成就未来
    *
#include <stdio.h>#include <stdlib.h>//定义:建立存储空间的声明称为定义;//声明:不需要建立存储空间的声明称为声明;//指针=地址;指针只能存放地址!!!例如:*p1=100 错误!可以 a=100; int *p1=&a;//指针变量=存放(指针)地址的变量:包含存储单元编号表示的地址和指向存储单元的数据类型;int main17(){    int a = 10, b = 20;    int *p1, *p2;    p1 = &a;    p2 = &b;    printf("a=%d,b=%d\n", a, b);    printf("p1=%d,p2=%d\n", p1, p2);//地址    printf("*p1=%d,*p2=%d\n", *p1, *p2);//}//指针int main18(){    int *p, *p1, *p2, a, b;    printf("input two integer number:\n");    scanf_s("%d%d", &a, &b);    p1 = &a;    p2 = &b;    if (*p1 < *p2)//地址互换    {        //p = p1;   p1 = p2;    p2 = p;        p1 = &b;        p2 = &a;    }    printf("a=%d.b=%d\n", a, b);    printf("max=%d.min=%d\n", *p1, *p2);//输出//a,c实际值不变,地址互换}int main19(){    void swap(int *p1, int *p2);    int a, b;    int *pp1, *pp2;    printf("input two integer number:\n");    scanf_s("%d%d", &a, &b);    pp1 = &a;    pp2 = &b;    if (*pp1 < *pp2)//a,b的值改变        swap(pp1, pp2);    printf("max=%d.min=%d\n", a, b);//输出}void swap(int *m1, int *m2)//将a,b的值改变{    int tmp;    tmp = *m1;    *m1 = *m2;    *m2 = tmp;}void exchange(int *q1, int *q2, int *q3){    void swap(int *m1, int *m2);    if (*q1 < *q2) swap(q1, q2);    if (*q1 < *q3) swap(q1, q3);    if (*q2 < *q3) swap(q2, q3);}int main20(){    int *p1, *p2, *p3;    int a, b, c;    scanf_s("%d%d%d", &a, &b, &c);    p1 = &a; p2 = &b; p3 = &c;    exchange(p1, p2, p3);    printf("the order is:%d,%d,%d\n", *p1, *p2, *p3);    printf("the order is:%d,%d,%d\n", a, b, c);}int main21(){    int a[10];    int *p;    for (int i = 0; i < 10; i++)        scanf_s("%d", a + i);    //for (int i = 0; i <10; i++)    //  printf("%d ", *(a + i));    for (p=a; p < (a+10); p++)        printf("%d\n", *p);} int main22(){    void inv(int *arr, int n);    int a[10];    int *p=a;    //输入    for (int i = 0; i < 10; i++, p++)        scanf_s("%d", p);    printf("\n");    //输出    for (p=a ; p<(a+10); p++)//p必须重新指向a[0],因为for循环已经是p指向a[9];        printf("%d ", *p);    p = a;    inv(p, 10);    printf("\n");    for (p=a; p<(a + 10); p++)//同理        printf("%d ", *p);}/*void inv(int *arr, int n){    int i, j, temp, m = (n - 1) / 2;    for (i = 0; i <= m; i++)    {        j = n - 1 - i;        temp = *(arr + i);                          //*(arr+i) = arr[i];        *(arr + i) = *(arr + j);        *(arr + j) = temp;    }}*/void inv(int *arr, int n){    int *i, *j, temp, m = (n - 1) / 2;    i = arr;    j = arr + n - 1;    for (; i <= (arr + m); i++, j--)    {        temp = *i; *i = *j; *j = temp;    }    return;}//快速排序void qSort(int *a, int n){    int i, j, k, t;    for (i = 0; i < n - 1; i++)    {        k = i;        for (j = i + 1; j < n; j++)        {            if (*(a + j) > *(a + k))                k = j;            if (k != i)            {                t = *(a + i);                *(a + i) = *(a + k);                *(a + k) = t;            }        }    }}int main23(){    void qSort(int *a, int n);    int i, b[10];    int *p;    p = b;    for (i = 0; i < 10; i++)        scanf_s("%d", p++);    printf("\n");//  for (p = b; p < (b + 10); p++)//一定要注意是p<(b+10);是b+10!!!如果不下心写成p+10。。会一直打印。。且打印错误//      printf("%d ", *p);    for (p = b, i = 0; i < 10; i++, p++)        printf("%d ", *p);    printf("\n");    p = b;    qSort(p, 10);//如果直接调用qSort(b,10);结果会出错。。。。why???    for (p = b, i = 0; i < 10; i++)    {        printf("%d ", *p);        p++;    }    printf("\n");}//二维数组int main24(){    int a[3][4] = { 1, 3, 5, 6, 7, 8, 9, 19, 2, 4, 12, 11 };    printf("%d,%d\n", a, *a);//0行首地址和0行0列首地址    printf("%d,%d\n", a[0], *(a+0));//0行9列首地址    printf("%d,%d\n", &a[0], &a[0][0]);//0行搜地址和0行0列首地址    printf("%d,%d\n", &a[1], a + 1);//1行0列首地址和1行首地址    printf("%d,%d\n", &a[1][0], *(a + 1)+0);//1行0列首地址    printf("%d,%d\n", a[2], *(a + 2));//2行0列首地址    printf("%d,%d\n", &a[2], a + 2);//2行首地址    printf("%d,%d\n", a[1][0],*(*(a+1)+0));//1行0列元素的值//~~~!!!###%%^^^~~    printf("%d,%d\n", a[2][0], *(*(a + 2)+0));//2行0列元素的值//~~~!!!###%%^^^~~}int main(){    int a[3][4] = { 1, 3, 5, 6, 7, 8, 9, 19, 2, 4, 12, 11 };    int *p;    for (p = a[0]; p < a[0] + 12; p++)//a[0]+12;与前面问题相同    {        if ((p - a[0]) % 4 == 0)            printf("\n");        printf("%4d", *p);    }    system("pause");    return 0;}
原创粉丝点击