字符指针变量
在指针的类型中,我们知道有一种指针叫做字符指针
一般的使用情况如下:
#include<stdio.h>
int main()
{char ch = 'w';char* pa = &ch;*pa = 'h';printf("%c", *pa);return 0;
}
还有一种使用方法如下:
#include<stdio.h>
int main()
{const char* prrr = "hello,world.";printf("prrr = %s\n", prrr);return 0;
}
很多人可能会疑问?这个是把hello,world赋给了prrr吗,其实不是的,在这个代码中,是将hello world 的首字母的地址给了prrr
在《剑指offer》中有一道和字符串相关的面试题,大家一起来看一下:
#include<stdio.h>
int main()
{char str1[] = "hello,bit.";char str2[] = "hello,bit.";const char* str3 = "hello.bit.";const char* str4 = "hello.bit.";if (str1 == str2)printf("str1 and str2 are same\n");elseprintf("str1 and str2 are not same\n");if (str3 == str4)printf("str3 and str4 are same\n");elseprintf("str3 and str4 are not same\n");return 0;
}
这个是代码运行的结果,大家想到了吗?
这个结果的产生是因为在str3和str4当中,两个指针指向了同一个常量字符串,系统会创建一个相同的空间,所以,他们两个会指向同一块内存空间,要是str1和str2的时候,是对不同的数组进行初始化,所以会产生不同的内存空间,所以第一个是not same ,第二个是same
数组指针变量
数组指针变量存放的应该是数组的地址
整型指针-存放整形的指针---里面存放的是整形的地址
浮点数指针-存放浮点数的指针---里面存放的是浮点数的地址
数组指针是什么?指针呢?还是数组呢?
答案当然是指针
大家来看一下下面的两个哪个是数组指针
char *arr[10] = { 0 };
char(*arr)[10] = { 0 };
我们可以看到,第一个是数组,有10个元素,每个元素的类型是char*
第二个是数组指针,指针指向的是数组,数组有10个元素,每个元素的类型是char
数组指针怎么理解呢?
*和arr结合代表着arr是一个指针,然后这个指针指向了一个10个元素的数组,这就叫做数组指针。
#include<stdio.h>
int main()
{int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){printf("%d ", *(arr + i));}return 0;
}
#include<stdio.h>
int main()
{int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };int* pa = &arr;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++){printf("%d ", *(pa + i));}return 0;
}