[toc]
指针
- 指针为什么要分类型?
- 因为当我们利用指针去取值的时候,系统就会自动根据指针的类型来确定应该取多少个字节中的值。
指针和数组:用指针访问数组
- 只要一个指针指向了数组,那么访问数组就有3种方式:
- ages[0];
- p[0];
- *(p + 0);
- 指针+1,是加上指针类型所占用的长度;
int ages[3] = {1, 3, 5};
int *p = ages;
for (int i = 0; i < 3; i++) {
printf("ages[%i] = %i\n", i, *(p + i));
}
//还有一种写法
for (int i = 0; i < 3; i++) {
printf("ages[%i] = %i\n", i, i[p]);
}
指针和字符串
- 通过数组存储字符串
char str[] = "slj";
str[0] = 'w';
- 因为数组名就是数组的地址,数组名保存的就是数组的第0个元素的地址,所以我们可以使用指针来保存字符串。通过指针保存一个字符串,其实就是保存的字符串第0个元素的地址。
char *str1 = "wxk";
- 通过数组保存字符串和通过指针保存字符串的区别
- 通过数组来保存字符串,
- 那么字符串是一个变量:str可以修改
- 字符串存储在内存的栈中
- 存在栈中的变量的特点:当作用域结束后系统会自动释放该变量
- 可以使用scanf函数接收字符串
- 通过指针来保存字符串,
- 那么字符串是一个常量:str1不能修改
- 字符串存储在常量区
- 存储在常量区的值的特点:不会被释放,而且多个相同的值对应同一个地址
- 不能使用scanf接收字符串
- 通过数组来保存字符串,
利用指针保存字符串的应用场景
for (int i = 0; i < 100; i++) {
//这里如果使用数组保存,意味着需要开辟100次,释放100次
//char str2[] = "ksg";
chat str2 = "ksg";
}
网友评论