C语言关于出现错误代码C2040 间接寻址级别不同的问题

这里是小白,在研究数组与指针时发现了问题。
在主函数外进行如下声明后程序正常运行:

#include<stdio.h>
#include<string.h>

char str[30] = "Hello world";
char *ptr = str;

void main()
{}

而修改成如下却报错:

#include<stdio.h>
#include<string.h>

char str[30] = "Hello world";
char *ptr;
ptr = str;

void main()
{}

显示

C2040 “ptr”:“int”与“char *”的间接寻址级别不同

C4047 “初始化”:“int”与“char *”的间接级别不同

定义为int型仍然报类似的错 在VS2017与VC6环境情况相同

将两者放入主函数则都没有问题

新人懂得不多 希望各位能够详细解答 多谢了

0

1个回答

一般C语言可以在函数体外定义变量并初始化但不能在函数体外对变量单独进行赋值 这里更深的学问涉及到编译问题

1
pppanyue
pppanyue 谢谢!
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
错误 1 error C2040: “menu”:“auto”与“cocos2d::Menu *”的间接寻址级别不同
今天在开发cocos2dx时,仿照MenuTest中的代码创建Menu时遇到这个问题。 出问题的代码如下: auto menu = Menu::create(item1, nullptr); 查网上的说法感觉不对,而且cpptest中也是这样用的。 后来看了下,是由于我是在HelloWorldSecene.cpp中加的代码。menu这个变量 已经在这行代码前使用过了,感觉vs2013报的
C4047、间接级别、间接寻址级别不同
编译器警告(等级 1)C4047 警告c4047:msdn给的解释是: “operator”:“identifier1”与“identifier2”的间接寻址级别不同 指针可指向变量(一级间接寻址),指向另一个指向变量的指针(二级间接寻址)等。 其实这里的间接级别不同,就是间接寻址级别不同: 关于间接寻址寻址级别不同: 例子: #include // C4047.c // c
vc++进行连接mysql的Demo(类似一个mysql客户端,相当强大哦)
vc++进行连接mysql的Demo(类似一个mysql客户端,相当强大哦)
关于char *和char [] 的不同
在C语言中,我们经常用如下两种方式来表示字符串:char *string = "hello world"; char string[] = "hello world";可能有时还会用这种方式:char string[11] = "hello world";问题来了,他们一样吗?不一样有什么不同?我用如下代码来做测试:#include<stdio.h>int main(void) { int
HLog代码分析
在分享replication时,有同事提出replication延时怎么样,(基于0.94.3) 本文主要代码分析一下Hlog生成及对relication的影响。具体replication请参考 http://brianf.iteye.com/blog/1776936 首先分析hlog什么时候产生: 在生成HLog对象时,会调用HLog的rollWriter(),此时由于this.
C++实现的间接寻址
之前学过,数据描述方法中有公式化描述,链表描述,间接寻址和模拟指针,在之前已经将公式化描述和链表描述通过代码的形式展现出来了,现在贴出简介寻址的代码。其中简介寻址是融合了公式化描述和链表描述的有点,使用一个指针表来记录数据的位置,指针表相当于一个数组,这样在插入,删除的时候,其中的数据的位置并没有发生变化,而仅仅就是指针表的指向发生了变化,同时很多操作又能像公式化一样通过O(1)的复杂度进行操作。下
求助!C++错误C2040间接寻址级别不同
BinaryTreeNode *last;rnrnrnrn>d:\学习\数据结构\实习\huffmansoftware-mfc\huffmansoftware-mfc\huffmansoftware-mfcview.cpp(328): error C2040: “last”:“BinaryTreeNode *”与“long”的间接寻址级别不同rn1> withrn1> [rn1> T=longrn1> ]rnrnBinaryTreeNode是一个类模板,不知道为什么就错误了,求救啊
error C2040: “!=”:“HANDLE”与“int”的间接寻址级别不同
if (pContext->m_File.m_hFile != (int)INVALID_HANDLE_VALUE)rn很简单的一个转换为什么老出现这个问题呢?!rn提示:error C2040: “!=”:“HANDLE”与“int”的间接寻址级别不同
C 语言间接寻址级别不同
[code=C/C++]rn#includernint main()rnrn typedef structrn rn char *ch;rn int length;rn HSString,*HSString;rnrn HSString test1;rn test1.length = 1;rn HSString pointer;rn pointer = test1;rnrn printf("%d",pointer.length);rnrn return 0;rnrn[/code]rnrn错误是:rnerror C2040: “HSString”:“main::HSString *”与“main::HSString”的间接寻址级别不同rnrn不懂…………
一点关于编译器不同优化级别的比较
实验目的 在编程语言中,对比不同编程风格的代码写法,或者通过使用不同的编译器和编译优化参数,通过编译器生成汇编代码,静态分析所生成汇编代码的运行效率。 实验平台、工具 在Windows平台下,采用VC6.0工具。  实验设计 相同编译器不同优化级别对冗余代码的优化对比。 int main() { int a=0;  int b=1; int c=2;  int d=3; i
KEIL C中实现直接寻址和间接寻址
参考:例说51单片机文档  P73
error C2040: “b”: “BYTE *”与“int”的间接寻址级别不同
[code=C/C++]rnrnCFile file;rn CString strvalue,str;rn char ctemp[260];rn file.Open(FileName,CFile::modeRead);rn BYTE* buf;rn BYTE *b = new BYTE[260];rn buf = new BYTE[260];rn file.Read(buf,260);rn for(int i=0;i<260;i++)rn rn b[i] = 256 - buf[i];rn rn file.Close();rn file.Open(FileName,CFile::modeWrite);rn file.Write(b,260);rn file.Close();rn[/code]rnrnC++在VS2008编译错误:rnerror C2040: “b”: “BYTE *”与“int”的间接寻址级别不同rnrn怎么回事?
VS2012编译错误汇总
1:error LNK2026 解决方法: https://jingyan.baidu.com/article/47a29f24334312c01423992e.html 1):打开该项目的“属性页”对话框,会出现如下界面 2):然后单击“链接器”--“命令行”,出现如下界面 3):将 /SAFESEH:NO 复制到“其它选项(D)”框中,然后点击应用 4) :最终通过编译并且运行成
cv::Mat与iplimage和CvMat类型如何进行互相转换
IplImage是OpenCV中C语言的图像类型; cv::Mat是OpenCV中C++语言的图像类型; IplImage -> cv::Mat IplImage* iplimg = cvLoadImage("heels.jpg"); cv::Mat matimg; matimg = cv::Mat(iplimg); cv::Mat -> IplImag
[间接寻址级别不同]
问题描述:rn1、写了一个单链表的模板类rn2、取链表中一个节点的值时,出现rn错误 1 error C2040: “b”: “double *”与“double”的间接寻址级别不同 f:\work_code\vs2005_code\链表\链表\main.cpp 11rnrn问题出在:突出部分rnrnrn主函数[main.cpp]:rn#include "randy_list.h"rn#include rnusing namespace std;rnint main()rnrn List l;rn double a = 2,b = 3;rn l.add_node(&a);rn l.add_node(&b);rn double *b = l.get_node(2);//此句会出现上述问题rn l.del_node(1);rn l.del_node(1);rn l.clear_list();rn l.add_node(&a);rn std::cout << *(l.get_node(1)) << endl; //此句能顺利通过rn return 0;rnrnrnrnrnrn模板类[randy_list.h]:rn#ifndef _RANDY_LIST_H_rn#define _RANDY_LIST_H_rn#include rnrn#ifndef NULLrn#define NULL 0rn#endifrnstruct Node rnrn void *data;rn Node *next;rn;rntemplaternclass Listrnrnpublic:rn List():length(0),phead(NULL),plast(NULL) ;rn ~List() if (phead) clear_list(); ;rn bool add_node(T *data);rn bool del_node(int inode);rn T* get_node(int inode);rn void clear_list();rnprotected:rnprivate:rn int length;rn Node *phead;rn Node *plast;rn;rntemplaternbool List::add_node(T *data)rn rn if (!phead)rn rn phead = new Node;rn phead->data = new T;rn if (!phead->data) delete phead; return false; rn memcpy(phead->data,data,sizeof(T));rn plast = phead;rn plast->next = NULL;rn length++;rn rn elsern rn plast->next = new Node;rn plast->next->data = new T;rn if (!plast->next->data) delete plast->next; return false; rn memcpy(plast->next->data,data,sizeof(T));rn plast = plast->next;rn plast->next = NULL; rn length++;rn rn return true;rnrntemplaternbool List::del_node(int inode)rnrn Node *p = phead,*q = NULL;rn if (inode <= 0 || inode > length)rn rn return false;rn rn if (1 == inode)rn rn q = phead;rn phead = q->next;rn rn elsern rn int i = 1;rn while (i < inode-1)rn rn p = p->next;rn i++;rn rn q = p->next;rn p->next = q->next; rn rn delete q->data;rn delete q;rn length--;rn return true;rnrntemplaternvoid List::clear_list()rnrn Node *p = NULL;rn while (phead)rn rn p = phead->next;rn delete phead->data;rn delete phead;rn phead = p;rn rn length = 0;rn phead = NULL;rn plast = NULL;rnrn templatern T* List::get_node(int inode)rn rn Node *p = phead;rn if (inode <= 0 || inode > length)rn rn return NULL; //rn rn int i = 0;rn while (i < inode-1)rn rn p = p->next;rn i++;rn rn return (T*)p->data;rn rn#endifrn希望哪位大侠能出来指点下小弟,三个妞!rn
间接寻址级别不同
rn[code=C/C++]rn24:unsigned char * LoadBitmapFile(char *, BITMAPINFOHEADER *);rn25:rn26:BITMAPINFOHEADER bitmapInfoHeader;rn27:unsigned char *bitmapData;rn28:bitmapData=NULL;rn29:bitmapData=LoadBitmapFile("Crack.bmp",&bitmapInfoHeader);[/code]rnrn[code=C/C++]rn1>正在编译...rn1>a6.cpprn1>.\a6.cpp(28) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>.\a6.cpp(28) : error C2040: “bitmapData”: “int”与“unsigned char *”的间接寻址级别不同rn1>.\a6.cpp(29) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>.\a6.cpp(29) : error C2040: “bitmapData”: “int”与“unsigned char *”的间接寻址级别不同rn1>.\a6.cpp(29) : error C2440: “初始化”: 无法从“unsigned char *”转换为“int”[/code]rnrnrn不懂,牛牛指点。。 >_
中间代码生成器-5-编译原理
中间代码生成器  一、实验目的 掌握中间代码生成器的构造原理和编程方法。   二、实验内容 用自顶向下方法或Yacc进行语法分析的基础上,编写一个中间代码生成程序。(见教材附录 A.1,p394) program      → block block     →   { decls stmts } decls  →   decls decl | e decl   →   type
Visual C++ 2010新功能之auto关键字
C语言里面其实就已经有auto关键字了,只不过很少用到,当我们在C或者以前的C++中,auto关键字基本上可以被无视:  比如这个局部变量: int a = 100; auto int a = 100;并没有什么区别,但是在VC2010中, auto已经有了新的含义,它可以对类型进行推断使得我们在使用的时候可以这样auto a = 100;那么a就是int类型,初始值为100. 下面是一个测试程
间接寻址的实现
《数据结构》实验二:                 线性表综合实验 一.实验目的      巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题   二.实验内容 1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。 要求
2. 地址运算符&和间接寻址运算符*
2. 地址运算符&和间接寻址运算符* 2.1 可以使用&获得变量的地址 2.2 可以使用*获得指针指向的变量值 2.3 实例 #include void test1(){             int i = 100;             // pi是指向i的指针             int *pi = &i;             printf("pi=%p,&i
数组 指针比较 直接寻址和间接寻址 数组和指针在编译的时候的区别
<br /><br />转自:http://www.itxuexi.com/tech/kaifa/cc/9241250231405.html<br />c语言中指针和数组在编译时的区别 例如:int a[10]和int *b,a[5]和*(b+5) 在编译的时候区别是什么? 经过反复的查资料和请教他人,最后在《c专家编程》里找到了很好的答案。<br />    1。编译器对数组名和指针变量的处理方式 <br />编译器在编译时会产生一个符号表,记录了符号名和它的地址。对于指针变量,这显然很好理解。而数组名就
直接寻址、间接寻址、立即寻址
一、前言    直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几种寻址方式,但是没有细说,这里来给大家详细介绍一下这三种寻址方式的不同体现在哪里!二、直接寻址    直接寻址即直接给出内存单元的物理地址/虚拟地址直接寻址!详细说一下:假如有一个内存,且大...
C语言程序的错误和警告
一段代码,在编译、链接和运行的各个阶段都可能会出现问题。编译器只能检查编译和链接阶段出现的问题,而可执行程序已经脱离了编译器,运行阶段出现问题编译器是无能为力的。如果我们编写的代码正确,运行时会提示没有错误(Error)和警告(Warning),如下图所示:图1:Dev C++ 的提示图2:VC 6.0 的提示图3:C-Free 5.0 的提示对于 VS、GCC、Xcode 等,如果代码没有错误,...
c语言编程常见错误集锦
c语言常见错误集锦,从书写规范到知识细节。
C语言常见错误代码释义
C语言常见错误代码释义C语言常见错误代码释义C语言常见错误代码释义
vs2013编译错误代码集锦
转自:http://blog.csdn.net/langb2014/article/details/50617665 编译器错误 C2001  错误消息                            常数中有换行符                           字符串常数不能继续到第二行,除非进行下列操作:                           •用反斜杠结束第
C语言错误代码释义大全,你值得拥有!
在学习C语言的过程中,相信许多小伙伴们跟我有过同样的经历,编写一个C语言程序,之后发现有错误,但是现实的错误代码看不懂,不知道自己错在哪。 所以呢,小便我找的了C语言错误代码释义大全给大家,希望大家收藏,阅读,相信这会对你们的C语言学习大有裨益。
C语言--使用技巧(二)日志分水平等级打印
debug.h #ifndef _DEBUG_H_ #define _DEBUG_H_ #include &amp;quot;stdio.h&amp;quot; // 定义log打印水平 #ifndef _LOGLEVEL_ #define _LOGLEVEL_ 3 #endif #define LOGERROR(x) if(_LOGLEVEL_&amp;amp;gt;0) { printf(&amp;quot;[WiFiDEV] &amp;quot;); printf...
Intellij IDEA 编译等级与源代码等级不一致问题
错误:Error:java: javacTask: source release 1.7 requires target release 1.7原因:生成class字节码的java版本,低于了源代码所使用的java语言版本(例如:1.5, 1.7, 1.8 .......)解决,两个步骤:a. 修改项目模块所使用的Java版本,IDEA中File -&amp;gt; Project Structure 左...
基本指针运算符:地址运算符(&)和间接寻址运算符(*)
&amp;运算符,它是一元运算符(又称地址运算符),用来得到变量的指针。 intPtr = &amp;count; 要通过指针变量intPtr引用count的内容,可以使用间接寻址运算符,即星号(*)。 x = *intPtr; [code=&quot;c&quot;] #import int main (int argc, char *argv[]) { @autoreleasepool{ int co...
C语言的本质(29)——C语言与汇编之寄存器和寻址方式
x86的通用寄存器有eax、ebx、ecx、edx、edi、esi。这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中。但也有一些指令规定只能用其中某些寄存器做某种用途,例如除法指令idivl要求被除数在eax寄存器中,edx寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax寄存器中,而原来的被除数被覆盖掉,余数保存在ed
学习C语言常见的几个问题及解决方法
所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。   大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的
51单片机的寻址方式
以下是转载地址http://passby-lxy.blog.163.com/blog/static/84000819201032011375318/ 学习汇编程序设计,要先了解CPU的各种寻址法,才能有效的掌握各个命令的用途,寻址法是命令运算码找操作数的方法。 指令的寻址方式 MOV P1,#0FFH这条指令,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个
间接寻址表
<br />间接寻找表就是建立一个指针数组,所以,既柔和了链表插入,删除的优先,又有随机访问的特性<br />#include<iostream> #include<string> using namespace std; class Exception { private: string mid; public: Exception( string a ):mid(a){}; string& GetString(){ return mid;} }; template< t
C语言打印信息——根据不同级别进行打印
在C语言编写代码和调试阶段,需要添加很多打印信息; 为了方便管理打印信息,可以使用不同打印级别打印不同信息的方式进行开发 在开发阶段,使用dbg级别,打印大多数信息;当开发完成准备发布时,使用err级别,屏蔽掉无用的调试信息 //打印等级 #define LOG_ERR (1) #define LOG_WRN (2)g, maybe OK #define LOG_INF (3)on #def...
C语言的一些常见问题
一.static 关键字的作用1.隐藏,当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性. 2.static 的第二个作用是保持变量内容的持久.存储在静态数据区的便令会在程序刚开始运行时完成初始化,也是唯一的一次初始化.共有两种变量存储在静态存储区:全局变量和 static 变量,只不过和全局变量笔记起来,static 可以控制变量的可见范围. 3.static
C语言日志分级设计
前言 C语言是一门面向过程的编程语言,其程序的设计流程就是根据上层的业务需求编写一系列函数,中间辅以if、for、while、switch等流程控制语句来实现各种数据的处理。从程序可靠运行方面考虑,我们希望程序的执行过程可以被程序员可控了解,这在程序开发过程中以及程序的后期维护都至关重要。能实现这种功能的最好方法就是在程序运行的关键节点添加日志打印追踪了。一个良好的日志打印输出设计可以使程序员无...
立即寻址,直接寻址,间接寻址
立即寻址就是指令当中自带数据,直接读取,最快; 直接寻址就是指令中存放的是地址,直接解析这个地址; 间接寻址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。 总共有14个16位寄存器,8个8位寄存器   通用寄存器:   数据寄存器:   AH(8位)  AL(8位)  AX(16位)   (
ADSL拨号中出现的错误代码
关于ADSL拨号中出现的错误代码
间接寻址级别不同 请问如何处理 谢谢
int a;rn int *a = new int[3];rna[0] = 3;rna[1] = 4;rna[2] = 5;
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习大数据c语言 python教程c语言