1.数组和指针的关系:
数组用来存放数据
指针用来操作数组中的数据
注意:
1.数组的数组名a是指向数组第一个元素的指针常量
a == &a[0];
a == int
2.数组元素的访问形式:
a[n] == *(a+n) == *(p+n) == p[n]
3.C语言中所有指针均可以使用[]访问空间
指针[n] == *(指针 + n)
2.字符型数组和字符串作为函数参数
练习:封装一个函数,传入一个字符串,对字符串实现倒置
int Reverse(char *pstr){
char *head = NULL;//设置头指针
char *tail = NULL;//设置尾指针
char temp = 0;
head = pstr;//让头指针指向开头
tail = pstr+strlen(str)-1;//让尾指针指向‘/0’前一个的字符空间
while(head < tail){
temp = *head;
*head = *tail;
*tail = temp;
head++;
tail++;
}
return 0;
}
3.const指针
const 指针只读不能写
1. int const *p; 和 const int *p; 是等价的
const修饰*p,p可以修改指向的空间,但不能利用该指针修改指向空间中的值
主要用于:
1.字符串在函数中传参时,只想让函数体内使用字符串,而不允许通过指针改变字符串的值使用const
2.定义指向字符串常量的指针,最好加const
const char *p = "hello world";
注意区分:
char str[32] = {"world"};
char const *p = NULL;
const char *q = "helloworld";//对 *str = 'H';//对,修改了str指向的数组的一个元素,变为了“Horld”
str = "how are you";//错,数组的数组名str是指向数组第一个元素的指针常量:,常量是不能修改的,所以这中写法是错的
p = "helloworld";//对,p是一个指针变量,它存放的是“helloworld”这个字符串常量在内存中存放的地址
*p = 'H';//错,p存放的是“helloworld”这个字符串常量在内存中存放的地址,*p就是取“helloworld”这个字符串常量,常量是不能修改的