当前位置:首页 » 编程语言 » c语言指针函数不用括号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言指针函数不用括号

发布时间: 2022-07-29 11:14:08

‘壹’ 为什么c语言用指针输出字符串不用加*号

为什么c语言用指针输出字符串不用加*号?因为char*STR定义了一个char*字符指针STR,而STR指向了ILOVECHINA中的第一个字符I。
在cout流中有一个复制循环,它是一个具有数百个输出STR点的字符串,在这个字符串中,STR被赋值给临时指针,以便一个接一个地输出。
然后*STR是一个字符,也就是I*是一个derecration,也就是STR指向的那个字符,所以*STR就是I这个不能被赋值或移位所以它不能被打印出来。
(1)c语言指针函数不用括号扩展阅读:
关于字符串指针
1.字符数组中存储一个度字符串
Char字符串[]="LinuxC";
Printf("%s\n",字符串);
字符串是一个字符数组的名称,它也是应答字符数组的第一个地址。
2.使用字符串指针指向一个字符串
如果你不想定义一个字符数组,你可以用一个指针指向一个字符串,称为“字符串指针”,例如:
Char*p="LinuxC";
Printf(“%s\n”,p);
“LinuxC”是一个字符串常量。字符串常量的C语言:在内存中打开一个字符数组来存储字符串常量,并将打开的字符数组的第一个地址保存到p。

‘贰’ c语言为什么有的时候malloc前不加括号

c语言不算强类型,
有隐式转换。
加不加都没太大关系。
malloc
返回值是void*
你可以用char*
int*
Buffer*等等一切指针去接受malloc的结果,
但是为了不出那个讨厌的warning,
也让人看的舒服些,
你可以强制转换一下。比如char*
p
=
malloc(100);
可以写成char*
p
=
(char*)malloc(100);
void*
p
=
malloc(100)不会warning,
因为类型匹配

‘叁’ c语言中指针的定义问题。为什么*q加括号

加不加括号,是数组指针,还是指针数组的区别
*p[2] 是一个指针数组,首先它是一个数组,数组中存的是指针,存指针的数组。
(*q)[2] 是数组指针,加括号先与 *结合,它是一个指针,指向一个第一维包含2个元素的2维数组,存数组地址的指针。

q=s ; 把 数组 s 的地址存入 q
p[0]=s[0] 把s[0] 第0行的首地址存入 数组p[0]中

‘肆’ C语言指针问题!

首先,要说明的是:数组名,是一个指针,它指向存放数组元素的一块内存区域,那么数组元素是怎么被引用的呢,我举个例子。如a[3],编译系统会首先找到这个数组的首地址,即a,然后根据〔〕中的值确定地址偏移量,即3,由此便确定了,要引用的元素是地址a+3所指向的单元的内容。你知道〔〕叫什么吗?它不只是“方括号”,在C中它的名字叫“偏址运算符”,由此可知它的作用是什么。在C++中,〔〕是可以被重载的。

明白了上面那一点后,再来看,那么指针变量p和数组名a便具有了相同的性质,即:都是一个指针。

(1)p+1,a+2,p++,p=p+1,p-a当然都是合法的了。因为它们是相同类型的量之间进行的运算。只不过,这个量不同于一般存放数据的量,它存放的是地址罢了。

(2)a++,a=a+1,a=a-1之所以非法,是因为一旦为数组分配了内存空间后,其首地址是确定的了,就相当于一个常量,常量怎么可以改变呢?

这里,你可能会有点疑惑。但我只想说一句:“对变量(或常量)的引用不等于改变这个变量(或常量)”,你好好的揣摩一下。如p-a,a-2等只是引用a的值进行计算,但a本身的值并没有改变,而a++,即a=a+1却是硬生生地尝试去改变a,你看,是这样的吗?或许换个写法你看着更直观一些,如:k=p-a与a=a-1

(3)关于它们的意思,其实我前面已经说了。既然p,a是指针,存放的是地址,那么对它们的操作当然是改变地址的运算了,如p+1就指向地址为P+1的这个内存单元,。。。。。
对于a++,a=a-1这些非法的家伙嘛,就不用多说了,它试图去改变有用的数据单元,是绝对不能容忍的,我们需要的是稳定。。。。

===================
有括号的情况下func是一个函数指针,而没括号它返回一个int指针函数。
函数指针是指向函数的指针变量。
每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

‘伍’ C语言 函数指针调用时加星号与不加星号都行是为什么

定义,因为它是定义。不带“*”,就无法区分是指针还是变量。
&:叫做,取地址符。p1=&a;其实就是把a的地址取出来,赋给p1。
你可以这么理解,*P1才是和变量a同一个等级的东西。&相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之类的。
我纵观你正在学的知识点,悄悄告诉你一个规律。你是否发现在调用的时候一般是没有*号的。
比如swap(p1,p2);(这里是引用函数,不是定义函数)。
比如for中和scanf中的p++
再比如数组赋值:p=a(这里的a是数组首地址)
像printf和定义指针,一般是*p
请你细细理解,好好品味。
我只是心血来潮答个题。越学到后面你会发现指针很灵活。送我个赞,我得不到什么,但你肯定能得到很多。

‘陆’ C语言函数指针怎么用

有函数: int fun(int a,int b);
要定义指向该函数的指针
对比指向 int a; 的指针
int *p; p = &a;
p的定义是怎么来的?
首先要保证p是一个指针类型
写下(*p),
然后,考虑下p的基类型,
p的基类型就是变量a的类型int
将int 放在(*p)前面就行了
int (*p);
括号可以省略,就成了 int *p;

同理
想要实现 pf = &fun;
(*pf) 将pf定义为一个指针,
将fun的类型作为pf的基类型
fun相当于一个 int (int a,int b)类型的量
int (int a,int b) (*pf);
基类型中有圆括号和中括号要后移
int (*pf)(int a,int b) ;//括号不能省略
pf = &fun;
调用时
(*pf)(3,4); pf(3,4)都可以

‘柒’ C语言指针问题,急。。 为什么函数现实错误少了一个括号

调用函数 实参不能加类型 直接reverse(str);即可

‘捌’ c语言中函数不带括号可不可以

不可以
函数格式为
返回值 函数名(参数列表)
{
函数体

}
无论是参数列表的小括号 还是函数体的大括号 都是不能省略的。

‘玖’ 在C语言里,一个有参数的函数调用时不带括号

结构体struct unicast_callbacks有两个函数指针成员。

static const struct unicast_callbacks unicast_callbacks = {recv_uc};
是在定义一个结构体类型struct unicast_callbacks的静态(static)常量(const),常量名是unicast_callbacks,{recv_uc}是在对结构体常量进行初始化,将第一个函数指针赋值为recv_uc。

‘拾’ C语言指针函数

如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。

那么这个指针变量怎么定义呢?虽然同样是指向一个地址,但指向函数的指针变量同我们之前讲的指向变量的指针变量的定义方式是不同的。例如:
int(*p)(int, int);
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。

所以函数指针的定义方式为:
函数返回值类型 (* 指针变量名) (函数参数列表);
“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。

我们看到,函数指针的定义就是将“函数声明”中的“函数名”改成“(*指针变量名)”。但是这里需要注意的是:“(*指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。

那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?首先看变量名前面有没有“*”,如果有“*”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。