关于数组长度的疑问
#include <iostream>
using namespace std;
int fun(char (*p)[])
{
cout<<(*p)[1]<<endl;
return 0;
}
int main()
{
char *arr[3] = {"hello","word","wan"};
fun(arr); //这里调用方式不对 在不改变int fun(char *p[]) 中的参数的基础之上,怎么才能调用成功呢
return 0;
}
#include <iostream>
using namespace std;
int fun(char (*p)[10])
{
cout<<p[1]<<","<<p[2]<<","<<p[3]<<endl;
return 0;
}
int main()
{
char arr[3][10] = {"hello","word","wan"};
fun(arr);
return 0;
}
#include <iostream>
using namespace std;
//int fun(char **p) 和int fun(char *p[]) 都可以。
int fun(char *p[]) //参数改成char *p[3],char *p[4]和不写长度作用一致。所以一般不写。
{
cout<<p[0]<<","<<p[1]<<","<<p[2]<<endl;
return 0;
}
int main()
{
char *arr[3] = {"hello","word","wan"};
fun(arr);
return 0;
}
#include <iostream>
using namespace std;
//3.1)指针数组参数,就是二级指针参数。
//int fun(char **p) 和int fun(char *p[]) 都可以。
int fun(char *p[]) //参数改成char *p[3],char *p[4]和不写长度作用一致。所以一般不写。
{
cout<<p[0]<<","<<p[1]<<","<<p[2]<<endl;
return 0;
}
//3.2 数组指针,必须是定长的数组的指针。
int fun_arr_ptr(char (*p)[10])
{
cout<<p[1]<<","<<p[2]<<","<<p[3]<<endl;
return 0;
}
int main()
{
char a[3][10] = {"hello","word","wan"};//3.3)二维数组
char *arr[3] ={arr[0],arr[1],arr[2]}; //3.4)让指针数组的元素,
//指向二维数组的一维数组元素的首地址.
char *ptr_arr[]={"hello","word","wan"};//3.5)指针数组,大概只有字符指针数组可以这么做。
fun(arr); //3.6)指针数组
fun(ptr_arr); //3.7)指针数组
fun_arr_ptr(a);//3.8)数组指针
return 0;
}
编译系统,可以自动检测出,数组的元素个数,和字符串的长度。
其实
char *ptr_arr[]={"hello","word","wan"};//3.5)指针数组,大概只有字符指针数组可以这么做。
相当于
char *ptr0="hello",*ptr1="word",*ptr2 ="wan";
char *ptr_arr[]={ptr0,ptr1,ptr2};
由于ptr0,ptr1,*ptr2,是不需要在程序里出现的,所以并不占用空间。
只有常量"hello"等和指针数组ptr_arr占用空间。