指针和数组
数组名表示的就是数组首元素的地址
#include <stdio.h>
int main()
{
int arr[10] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
system("pause");
return 0;
}
运行结果:(可以看出数组名和首元素地址相同)
则可以写为
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *p = arr;//p存放的是数组首元素的地址
可通过指针来访问数组
arr和&arr
arr是数组名,数组名表示的是数组首元素的地址
&arr表示的是数组的地址,而不是首元素的地址
#include <stdio.h>
#include <Windows.h>
int main()
{
int arr[10] = {
0 };
printf("arr = %p\n", arr);
printf("&arr= %p\n", &arr);
printf("arr+1 = %p\n", arr + 1);
printf("&arr+1= %p\n", &arr + 1);
system("pause");
return 0;
}
虽然数组名和&数组名打印的地址是一样的,但他们的含义却不同。数组的地址+1表示加上整个数组的大小(所以&arr+1和&arr相差40)
字符指针
char* pstr = “hello world.”;
这里代码的实质是把一个常量字符串的首字符h存放在了指针变量pstr中。
例题;
#include <stdio.h>
#include <Windows.h>
int main()
{
char str1[] = "hello world.";
char str2[] = "hello world.";
char *str3 = "hello world.";
char *str4 = "hello world.";
if (str1 == str2)
printf("str1 and str2 are same.\n");
else
printf("str1 and str2 are not same.\n");
if (str3 == str4)
printf("str3 and str4 are same.\n");
else
printf("str3 and str4 are not same.\n");
system("pause");
return