1.指针
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值;
指针的定义格式:
数据类型 * 变量名称;
注意:
1.定义时确定了指针变量的类型,那么该指针就只能保存对应类型变量的地址.
int number = 10;
int *pointer ; //定义了一个int 类型的指针
pointer = &number;//该指针变量存储了number变量的地址,我们就认为pointer指针指向了number
2.指针只能存放地址.
3.同一个变量可以有多个指针指向他
int number = 10;
int *pointerOne = &number;
int *pointerTwo = &number;
//有两个指针指向了number变量
4.指针可以更改指向的变量
int numberOne = 10;
int numberTwo = -1;
int *pointer = &numberOne;//指针指向了numberOne
int *pointer = &numberTwo; //指针指向了numberTwo
5不能访问野指针(没有指向的指针成为野指针)
2.字符串指针
在C中,字符串有两种形式来存储字符串,1.通过数组来存储. 2.通过指针
两者的区别:
1.通过数组存储的字符串,它是一个变量,存储在内存的栈中,可以被修改.
2.字符串指针,它是一个常量,存储在常量区,不能别修改.
3.指针数组
用来存储指针的数组
定义格式: 数据类型 *数组名称[数组长度]
char *str1 = "aaa";
char *str2 = "bbb";
char *str3 = "ccc";
char *array[] = {str1, str2, str3 };
for (int i = 0; i < 3; i ++)
{
printf("%s\n",array[i]);
}
4.指向函数的指针
定义格式:返回值类型 (* 指针变量名称) (函数参数列表);
注意:
1.函数也会被分配存储空间,函数名保存了函数的地址,与数组类似.
2.C语言中函数中不能定义函数,所以我们可以利用函数指针在函数内部来调用不同的函数
#import <Foundation/Foundation.h>
void upChar(char *charValue);
void lowerChar(char *charValue);
void changeChar(char str[],void (* style)(char *));
int main(int argc, const char * argv[]) {
//将输入的字符串大写转小写,小写转大写
//1.提示用户输入
printf("请输入一段英文");
char str[100] = {0};
gets(str); //此方法不安全
changeChar(str,upChar);//大写
changeChar(str, lowerChar);//小写
printf("%s",str);
return 0;
}
//更改字符串
void changeChar(char str[],void (* style)(char *))
{
char *pointer = str;
while (*pointer != '\0')//取出字符串的每个字母
{
style(pointer);
pointer++; //指针内的地址递增,递增单位是数据类型所占字节数
}
}
//小写
void upChar(char *charValue)
{
if (*charValue >= 'a' && *charValue <= 'z')
{
*charValue = *charValue - ('a' - 'A');
}
}
//大写
void lowerChar(char *charValue)
{
if (*charValue >= 'A' && *charValue <= 'Z')
{
*charValue = *charValue + ('a' - 'A');
}
}