C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题
2014-08-26 15:19
891 查看
在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的。下面总结下指针、数组作为参数传递需要的问题。
一级指针与二级指针的使用范围:
一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值;二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。
在作为参数传递时什么时候用一级指针,什么时候用二级指针?
一级指针作为参数传递时,由实参赋予形参对其指向内容的修改的能力,但是一旦修改形参的指向使其指向其它地方,则这种改变不会返回给实参,此时若要使实参的指针指向地址发生改变则使用二级指针。如下例:
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); //如果找到则输出此句
}
}
find1无法返回正确结果,而find2返回正确结果。
[b]数组名与指针作为函数参数需要注意的:[/b]
看下面求数组大小的例子:
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);
}
相关文章推荐
- 指针作为函数参数传递时需要注意的问题
- C++指针作为函数的参数进行传递时需要注意的一些问题
- 实例解析使用指针作为函数参数传递需要注意的问题
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。
- C语言中 数组到底是不是指针和数组作为参数问题
- C++指针作为函数的参数进行传递时注意的问题
- 关于指针和数组对申请内存malloc和作为参数传递的一些问题
- C++指针作为函数的参数进行传递时注意的问题
- C语言中,数组名作为参数传递给函数时,退化为指针
- vc++动态数组作为参数传递注意的问题
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言数组与指针作为传递参数的使用
- C语言中,数组名作为参数传递给函数时,退化为指针
- (转载) C语言技巧:怎样把数组作为参数传递给函数?(值传递和指针传递)
- MPI并行编程传递多维数组需要注意的若干问题
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言 数组名作为参数传递 数组名发生退化成指针
- 函数传递指针参数时注意的问题
- C语言数组与指针的问题注意,学了那么久的C语言居然都没有发现!
- json数组作为参数传递给java时候object问题