C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题
在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的。下面总结下指针、数组作为参数传递需要的问题。
一级指针与二级指针的使用范围:
void find1(char array[], char search, char * pa)
{
int i;
for (i=0;*(array+i)!=0;i++)
{
if (*(array+i)==search)
{
pa=array+i;
break;
}
else if (*(array+i)==0)
{
pa=0;
break;
}
}
}
void find2(char array[], char search, char** pa)
{
int i;
for (i=0;*(array+i)!=0;i++)
{
if (*(array+i)==search)
{
(*pa)=array+i;
break;
}
else if (*(array+i)==0)
{
(*pa)=0;
break;
}
}
}
void main()
{
char str[]={"afsdfsdfdf\0"}; //待查找的字符串
char a=‘d‘; //设置要查找的字符
char * p=0; //如果查找到后指针p将指向字符串中查找到的第一个字符的地址。
//find1(str,a,p); //调用函数以实现所要操作。
//find2(str,a,&p);
if (0==p )
{
printf ("Not found!\n");//1.如果没找到则输出此句
}
else
{
printf("found! p=%d",*p); //如果找到则输出此句
}
}
数组名与指针作为函数参数需要注意的:
看下面求数组大小的例子:
void fun(char str[],char *p)
{
printf("fun str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
}
void main()
{
char str[]={"afsdfsdfdf\0"}; //待查找的字符串
char *p=str;
printf("main str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
fun(str,p);
}
输出结果:
void fun(char str[],char *p)
{
printf("fun str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
}
void main()
{
char str[]={"afsdfsdfdf\0"}; //待查找的字符串
char *p=str;
printf("main str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
fun(str,p);
}
说明用数组名作为参数传递时,在由实参赋形参时,形参的数组名与指针等价,其无法记录数组大小,因此在函数中若用到数组的大小,应在定义它的主函数中求得大小并作为参数传递到函数中。如下:
void fun(char str[],int strlen,char *p)
{
...
}
void main()
{
char str[]={"afsdfsdfdf\0"}; //待查找的字符串
char *p=str;
printf("main str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
fun(str,sizeof(str),p);
}
void fun(char str[],int strlen,char *p)
{
...
}
void main()
{
char str[]={"afsdfsdfdf\0"}; //待查找的字符串
char *p=str;
printf("main str= %d,",sizeof(str));
printf("p=%d,",sizeof(p));
fun(str,sizeof(str),p);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。