X606C语言程序设计专项部分06

X606C语言程序设计专项部分06

指针变量

/*
     * 指针变量
     *
     * 什么是变量地址
     * 变量占用存储空间最小的那个字节地址
     *
     * 如何获取变量的地址
     * &变量名称
     *
     * 如何定义指针变量
     * 数据类型 *变量名称;
     */
    int num = 404;
    int *p;
    p = #

    printf("%p\n",&num);
    printf("%p",p);
    /*
    输出
    000000000064FE14
    000000000064FE14
    说明num变量把地址拷贝了一份给指针变量p
    p的地址与num的地址是一样的
     */

X606C语言程序设计专项部分06

指针变量的作用和注意点

	/*
     * 指针变量的作用
     * 如下操作
     */
    *p = 606;

X606C语言程序设计专项部分06

	/*
     * 1.指针变量是用来保存其它变量地址的
     *   别用来保存其它数据
     * 2.一个普通变量,可以被多个指针变量指向
     * 3.一个指针变量的指向是可以修改的
     * 4.指针变量类型必须和普通变量类型一致
     *   指针变量类型的作用
     *   告诉操作系统,访问指向存储空间的时候
     *   需要取出多少字节的数据
     *
     *   如果*p是char类型
     *   那么指向的存储空间只会取1个字节的存储空间
     *   也就是8位
     */
    // 第1个注意点
    int *x;
    x = #
    printf("%i",*x); // 606

    // int *y;
    // y = 666;
    // printf("%i",y); // 垃圾数据

    // 第2个注意点
    int num1 = 66;
    int *p1;
    int *p2;
    p1 = &num1;
    p2 = &num1;
    printf("%i%i",*p1,*p2); // 6666

    *p1 = 88;
    printf("%i",num1); // 88
    *p2 = 66;
    printf("%i",num1); // 66

指针变量练习传入基本数据类型变量的值

void change(int *pInt);

int main() {
    /*
     * 需求:定义函数,在函数中修改传入的基本数据类型变量的值
     */
    int num1 = 66;
    printf("%i\n",num1); // 66
    change(&num1);
    printf("%i\n",num1); // 68
}

void change(int *pInt) {
    *pInt = *pInt + 2;
}

指针变量的加减运算

	p1[1] = 6;
    printf("%i\n",p1[1]);   // 6
    printf("%i\n",nums[1]); // 6
    
    int nums1[] = {2,4,6,8};
    int *p6;
    p6 = nums1;
    printf("%i\n",*p6); // 2
    /*
     * 指针变量加1
     * 是加上指针变量数据类型的大小0
     */
    printf("%i\n",*(p6+1)); // 4

多级指针

	/*
     * 多级指针
     *
     * *p1      1级指针
     * **p2     2级指针
     * ***p3    3级指针
     *
     * 1级指针保存普通变量的地址
     * 2级指针保存1级指针的地址
     * 3级指针保存2级指针的地址
     */
    int num = 6;
    int *p;
    p = #
    printf("%p,%p\n",&num,p); // 000000000064FE14,000000000064FE14
    printf("%i\n",*p); // 6
    int **p2;
    p2 = &p;
    printf("%p,%p\n",&p,p2); // 000000000064FE08,000000000064FE08
    printf("%p\n",*p2); // 000000000064FE14
    printf("%i\n",**p2); // 6
    return 0;

指针数组

	/*
     * 指针和数组
     */
    short nums[6] = {1,2,3};
    short *p1;
    p1 = nums;
    printf("%p\n",nums);    // 000000000064FDF4
    printf("%p\n",&nums);   // 000000000064FDF4
    printf("%p\n",p1);      // 000000000064FDF4

    p1[1] = 6;
    printf("%i\n",p1[1]);   // 6
    printf("%i\n",nums[1]); // 6

程序设计数组转换成整数

void getNumArr();

int main() {
    getNumArr();
    return 0;
}

void getNumArr() {
    int a[] = {1,2,3,4};
    int j=1,s=0;
    int length = sizeof(a) / sizeof(a[0]);
    for (int k = length - 1; k >= 0; k++) {
        s = s + a[k] * j;
        j = j * 10;
    }
    printf("%d\n",s);
}

统计数组中最多的数出现的位置和重复次数

#include <stdio.h>

void getNumArr();
void getMaxCountNum(int arr[],int length);

int main() {
    int arr[] = {1,2,2,3,5,6,8,4,2,2,3,1,2,3,6,4,2};
    int length = sizeof(arr) / sizeof(arr[0]);

    getMaxCountNum(arr,length);

    getNumArr();
    return 0;
}

/**
 * 数组转换成整数进行输出
 */
void getNumArr() {
    int a[] = {1,2,3,4};
    int j=1,s=0;
    int length = sizeof(a) / sizeof(a[0]);
    for (int k = length - 1; k >= 0; k++) {
        s = s + a[k] * j;
        j = j * 10;
    }
    printf("%d\n",s);
}

/**
 * 统计数组中最多的数出现的位置和重复次数
 * @param arr 数组
 * @param length 数组长度
 */
void getMaxCountNum(int arr[],int length) {
    /*
     * i 循环索引
     * j 辅助指针
     * k 元素相同的数量
     * t 元素最开始的索引
     */
    int i,j,k,t,n=0;
    for (int l = 0; l < length - 1; l++) {
        for (int m = 1,j = l + 1; j<length ; j++) {
            if (arr[j] == arr[i]) {
                k++;
            }
        }
        if (n < k) {
            n = k;
            t = i;
        }
    }
    printf("%d,%d,%d",arr[t],t,n);
}
上一篇:06.循环遍历利器 for


下一篇:1.3编程基础之算术表达式与顺序执行 06 甲流疫情死亡率