C语言形参指针

来源:百度知道 编辑:UC知道 时间:2024/06/02 19:12:53
1.函数里void f(char* a)和void f(char *a)有什么区别啊.或者说char* a和char *a有啥区别?
2.再有要把函数的形参定义成指针,接受2维数组的地址怎么定义啊?..
void f(char *a) //怎么写?
{
}
int a[100][100];
f(a); //?
3.定义一个指针函数,怎么让它返回值是一个数组的首地址?

1 这两种形式没有任何区别,定义的都是char* 类型的指针,不过有的书上建议采用*和变量相靠近的写法,这样可以避免连续声明时的错误,例如:char *ptr,a;可以明显知道一个是指针的变量一个是char类型的变量。
2 二维数组实际可以声明成指向指针的指针。这样在接受形参的时候,就可以用一个双重指针来接受。
void f(int **a) //怎么写?
{
}
int a[100][100];
f(a);

3 返回值是一个指针就可以实现了,不过返回的地址一定要是在堆空间申请的空间,或者是在静态区的空间。不要返回在函数栈中的地址,以防止在退出函数时,栈空间释放,成为幽灵内存。

char* fun(){
char* ptr ="abc";
return ptr;
}

1.函数里void f(char* a)和void f(char *a)有什么区别啊.或者说
char* a 是C++的习惯写法,说明a是指针类型。因为C++强调类型
char *a是C的写法,强调变量本身。
2.void fun(char (*a)[100]);
(*a)[100]为指向二维数组的指针。n*100
3. int *(*fun)(参数列表);
这个函数指针返回一个int*的指针