1.数组和指针的关系:
数组用来存放数据
指针用来操作数组中的数据
int a[5];
int *p = NULL;
p = &a[0];
p = a;
a == &a[0];
a == int *
注意:
1.数组的数组名a是指向数组第一个元素的指针常量
2.数组元素的访问形式:
a[n] == *(a+n) == *(p+n) == p[n]
3.C语言中所有指针均可以使用[]访问空间
指针[n] == *(指针 + n)
2.一维数组作为函数参数:
int a[5] = {1, 2, 3, 4, 5};
int fun(int array[5]);
int fun(int array[], int len);
int fun(int *array, int len); //最常使用
练习:封装3个函数实现从终端接收5个数,对数组排序,对数组输出
3.一维字符型数组和指针的关系
数组的数组名是指向数组第一个元素的指针 ,是指针常量
char str[32] = {"hello world"};
char *p = NULL;
p = &str[0];
p = str;
字符串遍历操作:
while (*p != '\0')
{
p++;
}
4.字符型数组和字符串作为函数参数:
int fun(char *pstr);
练习:从终端接收一个字符串,编写一个函数统计该字符串中大写、小写、数字和空格的个数
练习:封装一个函数,传入一个字符串,对字符串实现倒置
练习:封装一个函数,传入一个字符串,将其拷贝到另一个空间中
5.const指针:
const == readonly 只读(只能读不能改)
const修饰谁谁不变
1.int const *p;
2.const int *p;
3.int *const p;
4.const int *const p;
5.int const *const p;
1和2是等价的
const修饰*p, 指针变量p可以修改指向的空间,但不能利用该指针修改指向空间中的值(地址可变,值不可变)
主要用于:
1.字符串在函数中传参时,只想让函数体内使用字符串,而不允许通过指针改变字符串的值使用const
2.定义指向字符串常量的指针,最好加const
const char *p = "hello world";
3. const修饰p, 指针变量p的值不能变, 但可以利用指针修改指向空间中的值, 一定要对指针初始化
主要用于:
数组的数组名是永远指向数组第一个元素的指针
4和5是等价的
const修饰p和*p, 指针变量p的值不能变,也不能利用*p改变指向空间中的值, 一定要对指针初始化。