int main()
{
char arr[] = "abcdef";
char* p = arr;//arr是字符串数组首元素的地址
printf("%s\n", arr);//但在函数中表示的是整个元素的地址
printf("%s\n", p);
// printf("%s\n",*p);//因为“abcdef”是一个常量字符串,这样的写法是错误的。
printf("%c\n", *p);//*p是数组的解引用操作,表示的即是首个元素的字符
return 0;
}
例如:
int main()
{
char arr[] = "abcdef";
char* p = 'w';
printf("%s\n",p);
return 0;
}
结果:a
因为abcdef是一个常量字符串,*p为字符串中的第一个字符,代码中将*p改成'w'是不可以的,会出现错误,(即访问内存错误)常量字符串是不可更改的。
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
char *p1 = "abcdef";
char *p2 = "abcdef";
if (arr1 == arr2)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
char *p1 = "abcdef";
char *p2 = "abcdef";
if (p1 == p2)//咱们把这里改一下
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
通过这两个例子:我们知道arr1和arr2是两个不同的数组,系统是把abcdef这个常量字符串存在一个地址,所以他们是一个地址,所以p1==p2;因为abcdef是一个常量字符串,我们可以加const char *p1;const char *p2来保护这个字符串
数组有:int arr[10]={0};整形数组
char ch[5]={0};字符数组
int* parr[4];存放整形指针的数组--指针数组
char* pch[5];存放字符指针的数组--指针数组
例如:
int main()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int *arr[4] = { &a, &b, &c, &d };是将a,b,c,d的地址放入指针数组中
for (int i = 0; i < 4; i++)
{
printf("%d ", *arr[i]);
}
return 0;
}
输出结果;
指针数组例如:
int main()
{
int arr1[] = { 1, 2, 3, 4, 5 };
int arr2[] = { 2, 3, 4, 5, 6 };
int arr3[] = { 3, 4, 5, 6, 7 };
int *parr[] = { arr1, arr2, arr3 };//将三个数组的首元素的地址放入一个指针数组中。
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d", *(parr[i] + j));
}
printf("\n");
}
return 0;
}
输出结果: