DAY 6
编译器:VS2019;
学习资料
1、B站视频(P28~P34)见链接 【求知讲堂2021C语言/C++视频99天完整版(不断更新中)学完可就业-哔哩哔哩】https://b23.tv/4DzQDY;
指针
指针、空指针和指针的运算
- 练习
#include<stdio.h>
int main(void)
{
//=============指针基础理解==================
//int a = 1;
//int* p = &a;//p=&a
//printf("a变量的地址为:%p\n", p);
//printf("a的值为:%d\n", a);
//printf("a的值为:%d\n", *p);
//float* p1;
//double* p2;
//char* p3;
//=============================================
//int* ptr = NULL;// 空指针;NULL指针
//int* p=0;// 空指针;
//printf("ptr的地址是:%p\n", ptr);
//printf("p的地址是:%p\n", p);
//printf("p的值是:%d\n", *p); // 地址为0的内存,操作系统用的,不指向任何东西
//if (ptr)// 指针ptr为非空
//{
// printf("hello,world");
//}
//if (!ptr)//指针ptr为空
//{
//}
//=============指针的运算==================
//int array[] = { 1,2,3 };
//int i;
//int* p;
//p = array;//p = & array[2]
//for (size_t i = 0; i < 3; i++)
//{
// printf("array[%d] = %p\n", i, p + i);
// printf("array[%d] = %d\n", i,*p+i);
//}
//======================= 指针的大小比较===================
int i=0;
int array[] = { 1,2,3 };
int* p ;
const int arrayMaxIndex = 3;
p = array;
/*while (p <= &array[arrayMaxIndex-1])
{
printf("array[%d] = %p\n", i, p);
printf("array[%d] = %d\n", i, *p);
i++;
p++;
}*/
do
{
printf("array[%d] = %p\n", i, p);
printf("array[%d] = %d\n", i, *p);
i++;
p++;
} while (p <= &array[arrayMaxIndex - 1]);
return 0;
}
指针数组
- 练习
#include<stdio.h>
#define MAX 3
//const int max = 3;
int main(int argc, char* argv[])
{
int array[] = { 1,2,3 };
int i;
int* p[MAX];//指针数组的定义
/*for (size_t i = 0; i < max; i++)
{
printf("array[%d] = %d\n", i, array[i]);
}*/
for (size_t i = 0; i < MAX; i++)
{
p[i] = &array[i];//指针数组的元素赋值
}
//p[0] = array;
for (size_t i = 0; i < MAX; i++)
{
printf("array[%d] = %d\n", i, *p[i]);
}
//const char* 表示的是字符串。string,C++,Java,c#
const char* names[] = { "A","B","C" };//字符串数组
//char* const NAMES[] = { "a","b","c" };
//string names[] = {"};
for (size_t i = 0; i < MAX; i++)
{
printf("名字的值为names[%d] = %s\n", i, names[i]);
}
return 0;
}
指针的指针
- 练习
#include<stdio.h>
void PoinTerfunction(int* p)
{
*p = time(NULL);
return;
}
float FindAverage(int* array, int size)
{
int sum = 0;
float avg;
for (size_t i = 0; i < size; i++)
{
sum += array[i];
}
avg = (float)sum / size;
return avg;
}
int main(int argc, char* argv)
{
/*int a=1;
int* p1;
int** p2;
p1 = &a;
p2 = &p1;
printf("a = %d\n", a);
printf("p1=%p\n", p1);
printf("*p1=%d\n", *p1);
printf("p2=%p\n", *p2);
printf("**p2=%d\n", **p2);*/
//================== 指针参数=======================
int sceond;
PoinTerfunction(&sceond);
printf("%d\n", sceond);
int student[3] = { 10,20,30 };
float avg;
avg = FindAverage(student, 3);
printf("平均分数为:%f\n", avg);
return 0;
}
函数的返回值是指针
- 练习
#include<stdio.h>
#include<stdlib.h>
int* GetNumber()
{
static int array[10];//C语言不支持调用函数时返回局部变量的地址,所以加上static
//seed整合,库函数
unsigned int time=NULL;
srand(time);
for (size_t i = 0; i < 10; i++)
{
array[i] = rand();
printf("%d\n", array[i]);
}
return array;
}
int main(int argc, char* argv)
{
int* p;
p = GetNumber();
for (size_t i = 0; i < 10; i++)
{
printf("*(p + %d) = %d\n", i,*(p+i) );
}
return 0;
}