函数名与数组名

C语言函数指针详解 C语言函数指针 一、什么是函数指针 1.理解函数指针 ​ 函数指针,首先根据他的名称我们就大概可以了解到他是一个指针,是什么样的指针呢?是和函数有关的一种特殊的指针。 ​ 我们知道 int*p 是指向int型变量的指针,char*p是指向char型变量的指针,那么不难理解,函数指针就是一个指向函数的指针。 int arr[10]={0}; int *p = arr; ​ 我们知道,在数组中数组名就是首元素的地址。 ​ 那么试着猜猜看,函数的地址是什么样的情况呢。 ​ 我们不妨打印一下看看结果是什 阅读详情

推测:函数名作函数参数时彻底演变成指针!


参考:http://bbs.youkuaiyun.com/topics/210062944


http://blog.youkuaiyun.com/goodlixueyong/article/details/6122356

http://www.cnblogs.com/ymy124/archive/2012/03/05/2380048.html

1. #include <iostream.h>
2. int main(int argc, char* argv[])
3. {
4. 
 char str[10];
5. 
 
char *pStr = str;
6. 
 
cout << sizeof(str) << endl;
7. 
 
cout << sizeof(pStr) << endl;
8. 
 
return 0;
9. }

运行结果:10

                     4

由该程序我们可以得出以下结论:

1、数组名不是指针,因为指针大小为4,而上面数组名的大小为10      

2、数组名神似指针,程序的第5行将数组名直接赋值给指针,这显得数组名又的确是个指针!我们还可以发现数组名显得像指针的例子:
1. #include <string.h>
2. #include <iostream.h>
3. int main(int argc, char* argv[])
4. {
5. 
 char str1[10] = "I Love U";
6. 
 
char str2[10];
7. 
 
strcpy(str2,str1);
8. 
 
cout << "string array 1: " << str1 << endl;
9. 
 
cout << "string array 2: " << str2 << endl;
10.
 
 return 0;
11. }
运行结果:string array 1: I Love U

                    string array 2: I Love U

标准C库函数strcpy的函数原形中能接纳的两个参数都为char型指针,而我们在调用中传给它的却是两个数组名!数组名再一次显得像指针!

  既然数组名不是指针,而为什么到处都把数组名当指针用?

现在到揭露数组名本质的时候了,先给出三个结论:

一、数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;

二、数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;

三、指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着据的存放地址!

 

1、数组名指代一种数据结构:数组
  现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的char型数组,所以sizeof(str)的结果为这个数据结构占据的大小:10字节。再看:
1. int intArray[10];
2. cout << sizeof(intArray) ;
第2行的输出结果为40(整型数组占据的内存空间大小)。
  2、数组名可作为指针常量
  根据结论2,数组名可以转换为指向其指代实体的指针,所以程序1中的第5行数组名直接赋值给指针,程序2第7行直接将数组名作为指针形参都可成立。
  下面的程序成立吗?
1. int intArray[10];
2. intArray++;
  可以编译之,发现编译出错。原因在于,虽然数组名可以转换为指向其指代实体的指针,但是它只能被看作一个指针常量,不能被修改。
  而指针,不管是指向结构体、数组还是基本数据类型的指针,都不包含原始数据结构的内涵,在WIN32平台下,sizeof操作的结果都是4。

顺便纠正一下许多程序员的另一个误解。许多程序员以为sizeof是一个函数,而实际上,它是一个操作符,不过其使用方式看起来的确太像一个函数了。语句sizeof(int)就可以说明sizeof的确不是一个函数,因为函数接纳形参(一个变量),世界上没有一个C/C++函数接纳一个数据类型(如 int)为"形参"。
  3、数组名可能失去其数据结构内涵
  请看下面一段程序:
1. #include <iostream.h>
2. void arrayTest(char str[])
3. {
4. 
 cout << sizeof(str) << endl;
5. }
6. int main(int argc, char* argv[])
7. {
8. 
 
char str1[10] = "I Love U";
9. 
 
arrayTest(str1);
10.
 
return 0;
11. }
  程序的输出结果为4。不可能吧?

  一个可怕的数字,前面已经提到其为指针的长度!
  结论1指出,数据名内涵为数组这种数据结构,在arrayTest函数体内,str是数组名,那为什么sizeof的结果却是指针的长度?这是因为:

  (1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
  (2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
  所以,数组名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。

 

 

以下是另一些说法:

1.数组名不可以作为左值,关于这一点,可以将数组名理解为指针常量 。
int a[10],*b;
b
是一个指针型变量,a是一个数组。
b是左值,可以存在b=a;
a不是左值,不能出现在"="左边。
a相当于一个常量,类型为数组。

2.对数组名进行sizeof运算时,结果是整个数组占用空间的大小,而sizeof(指针)得到的值是编译器分配给指针(也就是一个地址)的内存空间。

 

3.对数组名作&(取地址)运算,得到的还是数组第一个元素的地址,对指针取地址时得到的结果是指针所在的地址,也就是指向这个指针的指针。

4 
运算
一维数组和指针在"*"运算是都有访存操作。
多维数组在"*"运算只是类型改变,没有具体操作。
指针变量在"*"运算时先访存,获得地址,再取地址对应内存中的值。

指针变量在"&"运算时,得到指针变量的地址。
数组在"&"运算只是类型改变,没有具体操作。

5修改内容

char * p1 = "Hello World" ;     //分配字符串常量,然后赋给 p1  

char p2[ 20] = "Hello World" ; //分配一个数组,然后初始化为字符串  

//p1可以指向别的地方,但hello world不能更改,  

* p1 = 'h' ;   //error

//p2不能指向别的地方,但hello world可以更改  

p2[0] = 'h' ;  

//第一个字符串指针的操作等价于:

const char S[12] = "Hello World" ;  

char * p1;  

p1 = S;  

char p2[12] ;  

strcpy ( p2, S) ;  



http://www.cnblogs.com/this-543273659/archive/2011/09/03/2165748.html

函数名与函数指针

一 通常的函数调用
    一个通常的函数调用的例子:
//自行包含头文件
void MyFun(int x);    //此处的申明也可写成:void MyFun( int );

int main(int argc, char* argv[])
{
   MyFun(10);     //这里是调用MyFun(10);函数

      return 0;
}

void MyFun(int x)  //这里定义一个MyFun函数
{
   printf(“%d\n”,x);
}
    这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写格式:
MyFun(10);
    我们一开始只是从功能上或者说从数学意义上理解MyFun这个函数,知道MyFun函数名代表的是一个功能(或是说一段代码)。
    直到——
    学习到函数指针概念时。我才不得不在思考:函数名到底又是什么东西呢?
    (不要以为这是没有什么意义的事噢!呵呵,继续往下看你就知道了。)

二 函数指针变量的申明
    就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。
    在C系列语言中,任何一个变量,总是要先申明,之后才能使用的。那么,函数指针变量也应该要先申明吧?那又是如何来申明呢?以上面的例子为例,我来申明一个可以指向MyFun函数的函数指针变量FunP。下面就是申明FunP变量的方法:
void (*FunP)(int) ;   //也可写成void (*FunP)(int x);
    你看,整个函数指针变量的申明格式如同函数MyFun的申明处一样,只不过——我们把MyFun改成(*FunP)而已,这样就有了一个能指向MyFun函数的指针FunP了。(当然,这个FunP指针变量也可以指向所有其它具有相同参数及返回值的函数了。)

三 通过函数指针变量调用函数
    有了FunP指针变量后,我们就可以对它赋值指向MyFun,然后通过FunP来调用MyFun函数了。看我如何通过FunP指针变量来调用MyFun函数的:
//自行包含头文件
void MyFun(int x);    //这个申明也可写成:void MyFun( int );
void (*FunP)(int );   //也可申明成void(*FunP)(int x),但习惯上一般不这样。

int main(int argc, char* argv[])
{
   MyFun(10);     //这是直接调用MyFun函数
   FunP=&MyFun;  //将MyFun函数的地址赋给FunP变量
   (*FunP)(20);    //这是通过函数指针变量FunP来调用MyFun函数的。
}

void MyFun(int x)  //这里定义一个MyFun函数
{
   printf(“%d\n”,x);
}
    请看黑体字部分的代码及注释。 
    运行看看。嗯,不错,程序运行得很好。
    哦,我的感觉是:MyFun与FunP的类型关系类似于int 与int *的关系。函数MyFun好像是一个如int的变量(或常量),而FunP则像一个如int *一样的指针变量。
int i,*pi;
pi=&i;    //与FunP=&MyFun比较。
    (你的感觉呢?)
    呵呵,其实不然——

四 调用函数的其它书写格式
函数指针也可如下使用,来完成同样的事情:
//自行包含头文件
void MyFun(int x);    
void (*FunP)(int );    //申明一个用以指向同样参数,返回值函数的指针变量。

int main(int argc, char* argv[])
{
   MyFun(10);     //这里是调用MyFun(10);函数
   FunP=MyFun;  //将MyFun函数的地址赋给FunP变量
   FunP(20);    //这是通过函数指针变量来调用MyFun函数的。

      return 0;
}

void MyFun(int x)  //这里定义一个MyFun函数
{
   printf(“%d\n”,x);
}
我改了黑体字部分(请自行与之前的代码比较一下)。
运行试试,啊!一样地成功。
咦?
FunP=MyFun;
可以这样将MyFun值同赋值给FunP,难道MyFun与FunP是同一数据类型(即如同的int 与int的关系),而不是如同int 与int*的关系了?(有没有一点点的糊涂了?)
看来与之前的代码有点矛盾了,是吧!所以我说嘛!
请容许我暂不给你解释,继续看以下几种情况(这些可都是可以正确运行的代码哟!):
代码之三:
int main(int argc, char* argv[])
{
   MyFun(10);     //这里是调用MyFun(10);函数
   FunP=&MyFun;  //将MyFun函数的地址赋给FunP变量
   FunP(20);    //这是通过函数指针变量来调用MyFun函数的。

      return 0;
}
代码之四:
int main(int argc, char* argv[])
{
   MyFun(10);     //这里是调用MyFun(10);函数
   FunP=MyFun;  //将MyFun函数的地址赋给FunP变量
   (*FunP)(20);    //这是通过函数指针变量来调用MyFun函数的。

      return 0;
}
真的是可以这样的噢!
(哇!真是要晕倒了!)
还有呐!看——
int main(int argc, char* argv[])
{
   (*MyFun)(10);     //看,函数名MyFun也可以有这样的调用格式

      return 0;
}
你也许第一次见到吧:函数名调用也可以是这样写的啊!(只不过我们平常没有这样书写罢了。)
那么,这些又说明了什么呢?
呵呵!假使我是“福尔摩斯”,依据以往的知识和经验来推理本篇的“新发现”,必定会由此分析并推断出以下的结论:
1. 其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。MyFun函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系。
2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。
上述代码的写法,随便你爱怎么着!
请这样理解吧!这可是有助于你对函数指针的应用喽!
最后——
补充说明一点:在函数的申明处:
void MyFun(int );    //不能写成void (*MyFun)(int )。
void (*FunP)(int );   //不能写成void FunP(int )。
(请看注释)这一点是要注意的。

五 定义某一函数的指针类型:
就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。
我先给你一个自定义数据类型的例子。
typedef int* PINT;    //为int* 类型定义了一个PINT的别名
int main()
{
  int x;
  PINT px=&x;   //与int * px=&x;是等价的。PINT类型其实就是int * 类型
  *px=10;       //px就是int*类型的变量  
  return 0;
}
根据注释,应该不难看懂吧!(虽然你可能很少这样定义使用,但以后学习Win32编程时会经常见到的。)
下面我们来看一下函数指针类型的定义及使用:(请与上对照!)
//自行包含头文件
void MyFun(int x);    //此处的申明也可写成:void MyFun( int );
typedef void (*FunType)(int );   //这样只是定义一个函数指针类型
FunType FunP;              //然后用FunType类型来申明全局FunP变量

int main(int argc, char* argv[])
{
//FunType FunP;    //函数指针变量当然也是可以是局部的 ,那就请在这里申明了。 
   MyFun(10);     
   FunP=&MyFun;  
   (*FunP)(20);    

      return 0;
}

void MyFun(int x)  
{
   printf(“%d\n”,x);
}

看黑体部分:
首先,在void (*FunType)(int ); 前加了一个typedef 。这样只是定义一个名为FunType函数指针类型,而不是一个FunType变量。
然后,FunType FunP;  这句就如PINT px;一样地申明一个FunP变量。
其它相同。整个程序完成了相同的事。
这样做法的好处是:
有了FunType类型后,我们就可以同样地、很方便地用FunType类型来申明多个同类型的函数指针变量了。如下:
FunType FunP2;
FunType FunP3;
//……

六 函数指针作为某个函数的参数
既然函数指针变量是一个变量,当然也可以作为某个函数的参数来使用的。所以,你还应知道函数指针是如何作为某个函数的参数来传递使用的。
给你一个实例:
要求:我要设计一个CallMyFun函数,这个函数可以通过参数中的函数指针值不同来分别调用MyFun1、MyFun2、MyFun3这三个函数(注:这三个函数的定义格式应相同)。
实现:代码如下:
//自行包含头文件 
void MyFun1(int x);  
void MyFun2(int x);  
void MyFun3(int x);  
typedef void (*FunType)(int ); //②. 定义一个函数指针类型FunType,与①函数类型一至
void CallMyFun(FunType fp,int x);

int main(int argc, char* argv[])
{
   CallMyFun(MyFun1,10);   //⑤. 通过CallMyFun函数分别调用三个不同的函数
   CallMyFun(MyFun2,20);   
   CallMyFun(MyFun3,30);   
}
void CallMyFun(FunType fp,int x) //③. 参数fp的类型是FunType。
{
  fp(x);//④. 通过fp的指针执行传递进来的函数,注意fp所指的函数是有一个参数的
}
void MyFun1(int x) // ①. 这是个有一个参数的函数,以下两个函数也相同
{
   printf(“函数MyFun1中输出:%d\n”,x);
}
void MyFun2(int x)  
{
   printf(“函数MyFun2中输出:%d\n”,x);
}
void MyFun3(int x)  
{
   printf(“函数MyFun3中输出:%d\n”,x);
}

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法 阅读详情

相关推荐

从论文到生产:iSLIP优先级匹配算法在SDN交换机中的20年演进史

本文回顾了iSLIP优先级匹配算法在SDN交换机中的20年演进历程,从斯坦福大学的原始论文到现代芯片实现。通过独特的指针滑动和迭代循环机制,iSLIP算法显著提升了交换机的吞吐量和公平性,解决了传统FIFO调度的队头阻塞问题。文章详细探讨了算法在硬件实现中的工程挑战、开源实践及未来AI时代的智能调度方向。

weixin_29230649的博客 331

【C语言进阶】⑥函数指针详解

一、函数指针 1.概念 函数指针:首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址; 请看示例: int main(){ int a = 10; int*pa = &a; char ch = 'c'; char* pc = &ch; int arr[10] = {0}; int (*parr)[10] = &arr;//取出数组的地址 return 0; } 解析:parr是一个指向数组的指针,存放的是数组的地址; 所以: 数组指针 —存放数组地址的指针

森林里的白杨 6万+

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

本文详细介绍了如何使用C#和斑马官方SDK驱动ZT410 RFID打印机,解决中文乱码和RFID数据写入等常见问题。通过实战指南,开发者可以快速掌握从基础连接到高级调试的全流程,提升打印效率和可靠性。特别适用于物流、零售和资产管理领域的应用。

weixin_29267307的博客 224

函数指针

 函数名与函数指针一 通常的函数调用    一个通常的函数调用的例子://自行包含头文件void MyFun(int x);    //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){   MyFun(10);     //这里是调用MyFun(10);函数      return 0;}void MyFun(int x) 

小溪的专栏 831

光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件

软件界面如下,免安装,拷贝即可使用 导入光谱数据即可计算三刺激值、CIE1931、CIE1976、CCT CIE1931、CIE1976色坐标图形只管显示 导入的光谱数据格式如下,txt文本 波长380到780,间隔1nm 注意:缺省的数据默认写0即可 下面为一些CIE相关介绍: CIE(国际发光照明委员会):原文为Commission Internationale de L’Eclairage(法)或International Commission on Illumination(英)。这个委员会创

业余程序员小徐的博客 2万+

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 746

C语言指针详解(函数指针)

函数指针说白了也是一个指针,指针中所保存的地址中的内容是一个函数,同之前说过的数组指针相似,函数指针的定义便是返回类型 (* 指针名) (函数参数) //例如: int (*pa) (intx,iny)同数组指针一样,当定义函数指针的时候,* 需要和指针名打括号相结合,( )的优先级高于 * ,不打括号编译器自动会将 指针名 与( )相结合,如 int * pa (int x,int y) ,这样的话便是一个名为pa的函数,函数参数为 int x,int y,函数的返回类型时 int *

weixin_62905635的博客 1万+

glibc手动升级高版本导致系统(RedHat/Centos)异常(无法开机等)的解决方法(回退低版本glibc)

我的系统是Redhat7.6, 理论上Redhat7/Centos7都可以使用该方法解决问题。 首先慎重提醒各位:glibc升级会产生无法预料的后果!由于Android NDK需要高版本的glibc才可以使用,所以作死手动去更新了glibc2.18,使得重启系统后图形界面消失。(Redhat/Centos升级此类安装包最好用yum升级,因为系统内的程序对他们的依赖很大,升级会导致大部分程序无法使用...

weixin_42881528的博客 9695

C语言基础(三):函数名、函数指针、指针函数的理解

函数的理解 函数名的理解--函数指针 函数名也称为函数的指针,所以c语言中函数名就是一个指针。 函数指针 两种表示: int func(char,double); // 这是一个普通函数 int (*p)(char,double); //指向一个以上函数的指针 函数指针:指针,指向的类型是一个函数 int add(int a,int b) { return a + b; } //指针变量,指向add函数 //int (int a,int )(*p); int (*p)(int a...

qq_45955592的博客 5791

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

流体动力学仿真软件:Star-CCM+_(1).Star-CCM+基础及入门

Star-CCM+的用户界面(UI)分为多个部分,包括菜单栏、工具栏、工作区、视图窗口和控制台。菜单栏包含文件、编辑、视图、工具等常用菜单。例如,“File”菜单可以用于打开、保存和退出项目。工具栏提供常用的工具按钮,如新建项目、打开项目、保存项目等。也可以自定义工具栏,添加常用的功能按钮。工作区显示当前项目的结构和各个对象。可以通过拖拽方式组织和管理项目中的各个部分。视图窗口显示几何模型、网格、结果等。可以通过不同的视图模式查看和分析数据。控制台显示软件的运行日志和输出信息。

kkchenjj的博客 1200

数组名与函数名区别

在C语言中,函数名本质上是函数的入口地址,可隐式转换为函数指针。与数组名不同,函数名与&函数名完全等价,都表示函数地址。函数没有"大小"概念,sizeof(函数名)是非法的。通过函数指针可以实现灵活调用,三种调用方式(add、p_add、(*p_add))效果相同。函数指针的典型应用是回调函数,如qsort中的比较函数。相比数组名,函数名的地址特性更简单统一,&操作不会产生类型差异,是C语言实现动态调用的重要机制。

2201_75840339的博客 955

安川机器人外部轴添加

本文详细介绍了如何在安川机器人本体上添加第7轴以及如何设置动作,本文以添加点焊枪为例进行讲解。

haier123888的博客 7889

函数名与数组名的误解

函数名与数组名的误解 一、函数名的误解 很多人把函数名理解为是函数的地址名,其实函数名是一个函数实体的代表,并非是一个地址的代表。 函数名可以作为函数的地址,但是,绝大多数人都忽略了一个条件,从函数到指针的隐式转换是函数名在表达式中的行为,就是说,这个转换仅在表达式中才会发生,这仅是函数名众多性质中的一个,而非本质,函数名的本质就是函数实体的代表。 下面看一道牛客题 已知fun(int)是类Test的公有成员函数,p是指向成员函数fun()的指针,采用( )是正确的。 A、p=fun B、p=Test::f

qq_45165693的博客 526

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

函数名、数组名实际上是地址与地址的真正区别

#include int function_name(int number) { printf("in function_name() %d\n", number); return 0;}int main(void){ int array[10] = {2}; int *ptr1 = &array; int *ptr2

赵玉萍的专栏 3393

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数组名与地址,函数名与地址有啥关系 个人总结

比如在C语言中,一个函数占用一段连续的内存区,我们编写的程序,最终是不存在所谓的函数名的,有的只有内存单元地址如0xffeedd00.我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00。为一个指针,这里的退化就是上面提到的隐式转化。而sizeof和&这两种特殊情况让数组名成为了数组本身,其原因就是其背后并没有这种隐式转换,并且数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针,在失去其内涵的同时,它还失去了其常量特性,

kklovecode的博客 618

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

常见的指针与数组名以及函数名之间的区分

参考了网上的一些blog,我对一些常见的指针与数组名以及函数名之间的关系作一个简单总结。 1. int a;表示的是一个内存空间,这个空间用来存放一个整数(int); 2. int *a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数(int)的空间; 3.int **a;表示一个内存空间,这个空间用来存放一个指针p1,这个指针指向一个存放指针p2的空间;并且指向的这个

liangyanghui的博客 771

【C】数组名、函数名的特殊

数组名+1 == &数组名[0]+1 == 偏移单个数组元素大小,&数组名+1 == 偏移整个数组大小,颗粒度上,数组名 == &数组名[0],数组名可以看作指向第一个元素的指针。sizeof(数组名) == sizeof(*&数组名)是整个数组大小,sizeof(&数组名)是单个指针大小,sizeof(*数组名)是单个数组元素大小,sizeof(*数组名) == sizeof(*&数组名[0]),从这个公式上看,类似颗粒度维度上数组名等于一个指向第一个元素的指针。定义一个数组指针 = 数组名。

qq1714040125的博客 381

C----证明数组名不等于&数组名,函数名等于&函数名

所以,假设我们定义一个一维数组Array----int Array[10]; 那么就有,Array = &Array[0]; 所以,我们可得以下代码

qq_51143048的博客 411

函数名和数组名最大的区别

函数名做右值时加不加&效果和意义都是一样的;但是数组名做右值时加不加&意义就不一样

u012088914的博客 564

搬砖:函数名&函数名取地址

函数名&amp;函数名取地址 有时看到如下的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*****************************/ #...

hunter 216

函数名&函数名取地址

有时看到如下的代码: /*****************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> void test() { printf("123456\n"); } int main(int argc, char *argv[]) { ...

蓝色鲜橙多的博客 1万+

[C++][Test]函数名 数组名 &

1 Windows 1 shift + Tab 左移tab 2 Microsoft Visual Studio 1 ctrl + K + F 自动调整格式 2 F12 查找跳转 3 shift + Tab键 删除光标右侧一个Tab空格 4 ctrl + K + C 注释 5 ctrl + K + U 取消注释 ...

wee_Chang的博客 575

数组名 、 函数名 和 数组名取地址 、 函数名取地址

#include <stdio.h> #include <stdlib.h> #include <string.h> void test() { printf("123456\n"); } int main() { char a[10]; printf("&a:%p, a:%p, &a[0]:%p \n", &am...

QQ839787886的博客 818

C++中的函数名与函数名取地址

的相关代码时,遇到了一些疑惑,特意记录下来。运算符本来的意义,它要求其操作数是一个对象。根据上面所讲,此时的。是整个数组的首地址。虽然它两的值相同,但是类型不同。其它情况下会被转化为指向该函数的指针,那么这时的。是没有区别的,那么它们两本质的区别是什么呢?除过上面的两种情况外,还有第三种情况,那就是。是数组名,表示的是整个数组的首地址;的操作数时,它的类型才是函数对象;的值是一样的,那它们的类型一样吗?这个函数对象的地址。可以取得这个函数对象的地址。都可以得到函数的地址,也就是。的类型是函数对象,所以。

qq_41596730的博客 1121

指针与数组及函数关系

1.对于c++的九种内置基本类型来说。在程序中出现该名称,即表示指向该类型的一个变量(或常量等)。通常我们对于变量作为右值,即去变量地址空间的值。但对于数组名和函数名则不同(因为数组的值和函数值很难或无法表示)。如: int arr[2] = {0, 1};    //c++规定数组名代表指向首元素的地址,即数组名作为右值,取的是第一个元素的地址(如果取数组空间的值很难表示,另外数组名作为指针并

guoguo11191的专栏 475
上一篇: sizeof在C与C++中对字符常量的区别
下一篇: printf
rangf
博客等级 码龄18年 59粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值