X606C语言程序设计专项部分06
指针变量
/*
* 指针变量
*
* 什么是变量地址
* 变量占用存储空间最小的那个字节地址
*
* 如何获取变量的地址
* &变量名称
*
* 如何定义指针变量
* 数据类型 *变量名称;
*/
int num = 404;
int *p;
p = #
printf("%p\n",&num);
printf("%p",p);
/*
输出
000000000064FE14
000000000064FE14
说明num变量把地址拷贝了一份给指针变量p
p的地址与num的地址是一样的
*/
指针变量的作用和注意点
/*
* 指针变量的作用
* 如下操作
*/
*p = 606;
/*
* 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);
}