您当前的位置:首页 > 互联网教程

c语言中函数名就是一个指针吗

发布时间:2025-05-14 18:30:50    发布人:远客网络

c语言中函数名就是一个指针吗

一、c语言中函数名就是一个指针吗

1、是的。函数指针就是函数的指针,它是一个指针,指向一个函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

2、A)char*(*fun1)(char*p1,char*p2);

3、B)char**fun2(char*p1,char*p2);

4、表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。

5、fun3是函数名,p1,p2是参数,其类型为char*型,函数的返回值为char*类型。

二、c语言中数组名代表数组首地址,它的值在运行期间可以改变吗

1、数组名是数组的首地址,就是数组中第一个元素的地址,是常量。常量是不能出现在赋值号=左边作为左值的。楼上的都没有解释清楚,说数组名就是指针是错误的,指针是变量,是用来存储变量地址值的变量,而数组名是常量。一般情况下声明一个数组,比如char a[10];之后,数组名a都是数组的首地址,是一个地址常量。但是在函数声明的形参列表中除外。

2、是等价的,就是说这种情况下,就算你写的是数组的形式,编译器实际处理的时候也当指针来处理(注意指针是变量,形参也是变量,二者刚好对应)。所以在函数foo内部,你对a进行++,--,+=,=之类的带赋值的操作是完全合法的,因为此时a就是一个指针,不是数组名,当你往函数foo里面传入一个已经事先声明的数组的首地址时候,指针a里面的值就是你这个已经声明的数组的首地址,这样你在foo里面就可以对你那个数组进行操作,正是因为C有这个传地址的优点,所以省略了很多不必要的拷贝工作,试想如果没有这个传地址,你传一个有几万个元素的数组进去,那拷贝工作是相当可观的。这样,你该明白了int main(int argc, char** argv);里面为什么可以对argv进行++操作了,既然“main函数的第二个形参是一个指向字符串的指针数组”,argv出现在函数声明中,所以它实际上是一个指针,它并不是“一个指向字符串的指针数组”,而是一个可以获取“一个指向字符串的指针数组”的首地址值的变量。楼主,请结合我前面的讲解,仔细体会我前面这句话的意思。国内的教材不知道怎么写的,把别人越讲越晕。如果不明白,尽管发消息问我。

三、c语言中函数调用时若是传地址,行参和实参在同一地址吗

1、实参在定义时就开辟存储单元,这个存储单元地址在整个程序中是固定不变的;

2、只有在函数调用时才给形参开辟存储空间,如果是值传递,则将实参的值赋给形参,如果是地址传递,则为形参开辟一个临时指针变量,然后把实参的地址传送给形参

3、函数执行完毕返回主程序时,释放形参所占的存储单元。