c语言学习零碎整理(7):数组名是指针吗?(补)

c语言*零碎知识便签 这篇博客是写一写c语言学习过程中的一些零碎的知识,不定时更新!一部分原创,一部分转自一些博客,或者是摘抄书本上的讲解~,c语言知识本来就比较零碎,感觉就是捡漏一样。 1 引脚,又叫管脚,英文叫 Pin。就是从集成电路(芯片)内部电路引出与外围电路的接线,所有的引脚就构成了这块芯片的接口。引线末端的一段,通过软钎焊使这一段与印制板上的焊盘共同形成焊点。我们电脑的触摸鼠标就是运用了引脚。 2 ... 阅读详情
注:原文发表于 2005年09月13日 8:11 PM,因为今天修改了一下,保存后居然被莫明其妙地被删掉了,晕死!后通过百度快照找回(还有评论),现补记于下。

今天在csdn的c版看到了这样的一个帖子,问的是数组和指针的区别.但最后引出的却是"数组名是指针吗?"这样一个问题.

其中megaboy(飞天御剑流之杀神一刀斩) 的回答与众不同,按他对数组名的理解:数组名是一个符号地址常量,这个解释确实可以解释一些现象,但还有很多不能用这个来解释的问题.

比如我在那个帖子里提到的两个程序:

1,include
main()
{
int a[]={1,2,3};
int *p;
p=a;
printf("%d/n",p);
return 0;
}一个符号地址常量怎么可以对一个指针赋值呢?

2,又比如,printf的参数要求是一个指针,按megaboy的说法下面的程序肯定不成立.

#include
main()
{
char a[]="wayne";
printf(a);
return 0;
}但结果是打印出wayne

晚上迎接新生回来以后,查了一下<

至于到底是怎么转换地,我想没有必要了解的那么多.

所以我还是认为"不带下标操作符的数组名会被解释成指向首元素的指针".这样好理解.但是数组名是不能被修改的,它是一个常量,不能进行任何赋值或加减的运算.

2005.11.26 更正:
今天又认真地看了一遍K&C中关于指针和数组的章节,感到自己以前的理解是有偏差的。
我现在的理解是:
1。数组名所代表的是该数组最开始的一个元素的地址。
2。指针是一种保存变量地址的变量。
3。数组名和指针之间有一个不同之处。指针是一个变量,因此,在C语言中,语句pa=a和pa++都是合法的。但数组名不是变量,因此,类似于a=pa和a++形式的语句是非法的。
以上均抄自K&C。以前看书太不仔细了。如果从汇编的角度看的话应该更容易理解一些。
至于<

2005.12.10 补充:

在一个blog上看到一篇文章,也是讨论数组名的

(http://blog.youkuaiyun.com/soloist/archive/2004/11/03/164625.aspx),

觉得写得不错,所以写一下自己现在对这篇文章的一些认识,就算是对自己写的东西的一个补充吧。现在看自己前面写的,觉得以前的理解确实比较浅薄。学无止境啊,学习ing!

下面引用一下soloist的文章(加粗的是我自己的一些试验和理解):

C/C++中的数组名是个很奇怪的东西,它到底代表什么呢? 

对于char array[n](n是一个常数),大概有这么几种语义:

<1> char* const(注意不是const char*) <2> char [n]

举例如下(WIN2000 PRO平台,VC.NET 7.1下编译):

<1> char p = array; //array表示char const,p得到的是数组的首地址

size_t size = sizeof(char [n]); // size等于n

/**********sizeof(char [n])就相当于sizeof(array)*********/

<2> char (*p)[n] = &array; // array表示char [n],

// p得到的仍然是数组的首地址

char (*q)[n] = array; // 编译错误

/**********因为q的类型是char (*)[n],而array的类型是char* ************/

char (*r)[n] = (char (*)[n])array; // r得到的是array数组的首地址

/*********************我的试验和理解********************************

#include

enum{n=12};

main()

{

char array[n];

char (*p)[n] = &array;//这里,&array[0]等价于&array

printf(“%d/n%d/n”,sizeof(*p),sizeof(p)); //结果为12,4

return 0;

}

语句char (*p)[n] = &array;声明了p一个指向字符数组的指针,这个数组的大小和array一样。所以sizeof(*p)和sizeof(array)的值相等。注意:在这个程序中,数组array和*p都只是被声明,并没有被分配内存。

我又试了一下,发现sizeof(array)和sizeof( *(&array) )相等。这就可以更好地理解上面的程序了。上面的程序和sizeof( *(&array) )相比,只是多了一个变量p罢了。p的地址为&array,那么*p就是array了。所以sizeof(*p)就和sizeof(array)的值相等了。

<3> char (&p)[n] = array; // array表示char [n]

这个语句当时让我有些迷惑,后来在别人的指点下,才明白&在这里原来是c++中的引用(c++学的不多,放在这里就更让我不懂了)。在c中编译不能通过。这个语句声明p是数组array的一个引用。所以sizeof(p)=n.

那篇文章还讨论了不少,但基本上都是以前面的为基础。



c语言学习零碎整理(11):怎样通过判断按键退出循环 c语言学习零碎整理(11):怎样通过判断按键退出循环                      -----温铭  blog.youkuaiyun.com/wayne92前几天在c#版中看到一个帖子:“如何用c#实现,在while (true)循环中,按Esc键退出循环?" 那时候以为只能用hook来监视键盘,看了看后面一些猩猩的回复,只怪自己c#太菜,都没有看明白:( 昨天在c版看到又有人问这个问题,其中cy 阅读详情

相关推荐

“风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南

《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx.dll文件的缺失往往是一个不容忽视的原因。

czl922的博客 1257

c语言学习零碎整理(7):数组名是指针吗?

今天在csdn的c版看到了这样的一个帖子:http://community.youkuaiyun.com/Expert/topic/4264/4264741.xml?temp=.8964502 问的是数组和指针的区别.但最后引出的却是"数组名是指针吗?"这样一个问题.其中megaboy(飞天御剑流之杀神一刀斩) 的回答与众不同,按他对数组名的理解:数组名是一个符号地址常量,这个解释确实可以解释一些现象,但

wayne 我的陋室我做主 3082

全志平台Sensor驱动移植实战:从点亮到调优的完整指南

本文详细介绍了在全志平台上进行Sensor驱动移植的全过程,从硬件引脚配置到软件参数调优,涵盖点亮、出图和调优三大阶段。重点解析了OV02B10传感器的I2C通信建立、上电时序调试和初始化参数配置等关键技术点,并提供了实用的调试技巧与问题排查指南,帮助开发者高效完成全志平台Sensor驱动移植工作。

weixin_28727975的博客 218

c语言学习零碎整理(10):探讨scanf函数

scanf函数我曾经在这个函数上犯过不少错误,也看到别人犯过的错误,记下来,提醒自己不要重蹈覆辙了。如果对你有用,那就更好了:)如果你发现文章中有错误,欢迎你不吝赐教。希望和大家一起学习!(我的邮箱:moongbingbing@gmail.com    blog: http://blog.youkuaiyun.com/wayne92       温铭 )有关详细的scanf函数解释,大家可以去看看《C程序设计

wayne 我的陋室我做主 5795

电力电子技术文章:ACOT控制模式在Buck变换器中的频率稳定性分析

本文深入分析了ACOT控制模式在Buck变换器中实现频率稳定性的原理与优势。通过对比传统COT模式,阐述了ACOT如何通过自适应调整导通时间,将开关频率锁定在设定值,从而有效应对输入电压与负载变化。文章还探讨了其在轻载DCM模式下的高效与平滑切换特性,并提供了关键的设计考量与实战指南。

cc789的博客 1150

Win10家庭版没有Hyper-V?教你一招轻松解决(含避坑指南)

本文详细介绍了在Win10家庭版中启用Hyper-V的完整实战指南。通过DISM工具链绕过系统版本限制,无需重装系统即可完整启用所有Hyper-V组件,适用于开发者测试多系统环境和安全隔离应用场景。文章包含详细操作步骤、常见问题解决方案及性能优化配置,帮助用户轻松解决Win10家庭版没有Hyper-V的问题。

weixin_29239661的博客 495

算法导论 影印版 勘误

引自:http://www.cs.dartmouth.edu/~thc/clrs-2e-bugs/bugs.phpSeverity levels A minor typographical error that should not affect your understanding (46 errors in first printing). A minor technical or expos

wayne 我的陋室我做主 4237

避开LLC环路设计三大坑:从K因子法看谐振频率选择与相位裕度优化

本文深入剖析LLC谐振变换器环路设计中易犯的三大误区,重点阐述如何运用K因子法优化谐振频率选择与相位裕度。文章通过实际案例,解析了工作区域选择、右半平面零点规避及补偿器相位基准等关键问题,为工程师提供了一套系统性的稳定环路设计方法,确保电源在动态负载下可靠工作。

qsc9012345的博客 262

刚写了一个词法分析器

今天忙了一天,做了一个C_minus的词法分析器。下午睡醒后,写了一个文档,介绍了可以分析的范围,测试数据和主要的数据结构和算法。晚上搞了三个多小时,不停地编译,运行,debug。当看到那期待已久的数据,感觉好爽!因为编程的时候是对关键字,符号,数字等是分开编的。所以等明天有时间的时候,把几个程序联在一起就可以啦。等全部搞好了,把代码贴出来请大家斧正。这个东西是编译原理的课程设计中的一个,我是用c

wayne 我的陋室我做主 3543

关于自制的《航空学报》latex模板(非官网模板)

《航空学报》的官网只提供了word模板,并且该期刊投稿只需要pdf版本不需要源文件。为方便latex爱好者撰写论文,提供该模板及说明给广大科研人士~

qq_37105055的博客 4693

【电路设计】SERDES与pcie

明确通信接口需要达到什么样的数据速率、信号完整性以及系统中各个部件的互相作用。2.

数字人生 4566

c语言学习零碎整理(8):看一个标准的库函数是怎么写的

char * strcpy( char *strDest, const char *strSrc )  {    assert( (strDest != NULL) && (strSrc != NULL) );    char *address = strDest;      while( (*strDest++ = * strSrc++) != ‘/0’ )           ;    ret

wayne 我的陋室我做主 3166

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 4094

C语言学习零碎整理(4):堆和栈

先讲一下内存分配的几种方式:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配,亦称动态内存分配。程序在运行的时候

wayne 我的陋室我做主 2546

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C语言学习零碎整理(3):sprintf函数

在Bjarne Stroustrup写的Learning Standard C++ as a New Language中有这样一个程序:#includeenum{max=20};main(){      char name[max];   char fmt[10];   printf( "Please enter your first name: /n");    sprintf(fmt, "%%

wayne 我的陋室我做主 2362

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

我的程序(3):词法分析器

/*****************************C_minus词法分析器 1.0版 **********************************  作者:温铭*  Email: moonbingbing@gmail.com*  版权所有(C) 2005.11*************************************************************

wayne 我的陋室我做主 2304

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

c语言学习零碎整理(1):缓冲区

觉得学习一门语言有三个方面:一是语言本身的学习:语法,函数,特性等等;二是系统或计算机底层方面的了解:计算机的组成原理,操作系统额概念等等;三是算法和数据结构的学习.我想如果这三个方面学到融会贯通的话,就可以称为高手了吧.我的整理中主要是第一和第二个方面,至于算法和数据结构,等到大三有时间的时候再去深入学习一下.(买了半年了,还没看多少,惭愧ing).1,为什么要用缓冲区?如:  int c; 

wayne 我的陋室我做主 2263

C语言学习零碎整理(5):关于char指针p和char s[]的区别

char *p="abc"作为一个常量,存放在空间的数据区,其内容不可改变(在win tc和tc3.0中可以改变,但在vc++6.0 中不可以。在ANSI C中,是不可以改变的) char s[]="abc"存放在栈内,其内容可以改变char *p="abc"  ;//如果程序中企图通过指针p来修改字符串“abc”的内容,那该程序不可移植。 char s[]="abc" ;//可移植的写法。 指针

wayne 我的陋室我做主 2065

c语言学习零碎整理(9):传值调用,并不简单(特别是有指针的时候)

我以前发贴问过这方面的问题,把帖子地址给出来,希望提醒自己。http://topic.youkuaiyun.com/TopicFiles/2005/03/22/11/3870603.xml帖子里面很多人很热心得给我讲得很清楚。谢谢你们!

wayne 我的陋室我做主 1954

我的c学习心得(零碎收拢) 序:

大一下学期学的c语言,已经一年了,感觉时间过得好快,不知不觉中就要进入大三了。觉得又必要总结一下,对c语言学习中的零碎东西收拢一下。同时也能让更多的人批评指正我,(也许我错了好多还自以为是)大家一起学习,一起为梦想而奋斗!想一想自己的大学生活,觉得还算对的起父母的money。在我们计算机系里面整天玩游戏的人有之(不少),整天啃书,基本天天在自习的人有之(大都是女生,考试成绩都很好)。我呢,不喜欢出

wayne 我的陋室我做主 1789

C语言学习零碎整理(6):怎样使用命令行参数

如:#includemain(int argc, char *argv[] ){    int i;     for(i = 1;i        printf("%s%s",argv[i],(i     printf("/n");    return 0;}对这个程序进行编译和连接,生成可执行文件,则可用它作为一个命令用在DOS提示符后。××××一定要注意可执行文件的路径问题。×××如:文件存在

wayne 我的陋室我做主 1560

我的程序(2):c源码统计器

我的程序(2):c源码统计器这是大二时数据结构的课程设计,要求用vc做一个有用户界面的程序.因为当时还不会用vc,所以在去年寒假用c写了一个没有界面的源码统计器,就算是课程设计的内核吧.期间又该了多次,添加一些功能,增强安全性,对代码进行优化等,总共又5个版本.贴出来几个有代表性的,希望大家指正.0.0版  :在键盘上输入程序,然后程序返回结果.                      /*统计

wayne 我的陋室我做主 1541

我的程序(4):C++代码注释分离

/////////////////////////////////////////////////////////////////// FileName :  codefilter.cpp // Creator  :  温铭// Date     :  2007-3-13 // Comment  :  读取一个C++文件,分离其中的注释。//             把代码写入另外一个文件中,把注

wayne 我的陋室我做主 1534

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 239
上一篇: 关注天气
下一篇: Ansi,UTF8,Unicode,ASCII编码
wayne92
博客等级 码龄23年 55粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值