精华内容
下载资源
问答
  • c语言中常量问题

    2013-11-20 14:11:00
    群里有人问了这么个问题,下面这段程序运行会报错 int main(){ int *p1="abc",*p2="ABC",p3[8]=...看了一眼没发现问题,自己运行了下,果然报错,明显是那种指针类型的错误 简单调试了下发现问题出strc...

    在群里有人问了这么个问题,下面这段程序运行会报错

     

    int main(){
      int *p1="abc",*p2="ABC",p3[8]="XYZ";
      strcpy(p3+2,strcat(p1,p2));
      printf("%s\n",p3);
    }

     

     

    看了一眼没发现问题,自己运行了下,果然报错,明显是那种指针类型的错误


    简单调试了下发现问题出在strcat这里,难道是函数使用不对??确认下没有问题

    群里有人提示说可能是字符常量的问题,马上意识到应该就是这问题了,想起曾经琢磨过的内存分配的问题,这种指针是仅仅指针在栈上,而数组则是指向的内容也在栈上,首先把p1和p2换成数组int pi[],p2[]运行没有错误,看来基本是这问题了

    尝试执行int *p1="abc";p1[2]='d';也会报错证明p1指向的内容是不可修改的,即在常量区,问题搞定

     

     

     

    转载于:https://www.cnblogs.com/abc123456789/p/3433459.html

    展开全文
  • 这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来单个字符,字符串常量是一对双引号括起来字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上,所以字符串“a”实际上包含两个...
  • 中文名:C语言编程:一本全面的C语言入门教程(第三版) 格式:PDF 完整程度:完整 包含中文版PDF,英文版PDF和习题答案 英文名:Programming in C:A Complete introduction to the C programming language,Third ...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂警告信息?  2.7 我遇到这样声明结构代码:structname{intnamelen;charnamestr[1];}...
  • C语言const关键字四种用法

    千次阅读 2016-11-13 22:19:37
    gcc,const是通过编译器编译时候执行检查来确保实现(也就是 说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器, 就可以修改const定义的常量,而运行时不会报错。 */ ...

    博客: http://www.cnblogs.com/zhangfeionline/p/5882790.html

    #include <stdio.h>
    
    /*
    gcc中,const是通过编译器在编译的时候执行检查来确保实现的(也就是
    说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器,
    就可以修改const定义的常量,而运行时不会报错。
    */
    int  main(int argc, char const *argv[])
    {
    
         /*
         const int a;  / 
         int const a; 有一样的意思
         如果我们给出 const int  a;你应该知道这是将a常量化了,但是为什么那?
         那是因为int 和const 都作为一个类型限定词,有相同的地位。
        所以你也可以写成 int const a;似乎这样更加好理解!当然这都不难,
        难点在哪里哪?当然此时你如果定义指针也是可以修改的,但是会报警告!
        当然强制类型转换后警告也不会报了!
        所以  const int a=10; 是申明了一个只可读的变量,如果 a=12;在编译期报错。
         */
    
        /*1、申明一个常变量*/
        const int a=10;
         /* a =12;  变异错误,a是编译期常量 */
    
    
         int b=10,c=55;
    
         /*2、  申明一个指针, 该指针指向的变量不可更改 ,相当于通过*p指针获得了原来实例的可读版本
                     一般用于子函数调用中形参函数,限制子函数中不能对调用放内容进行更改
                     如 const char* src; 或 char const *src;
                     *p是常量。也就是说,p指向的数据是常量
    
                     const int* p
            int const *P;
            const int* p; 这是修饰了谁那?其实我们可以这样想,如果我们把int 拿出来 
            也就是 const int (*p); 等价于  int const (*p);
            由此我们可以看出来const修饰了*p啊!
            也就是指向的内容不可以改变,比如p已经指向a变量,但是*p=45;会报错,因为*p不可改变
            但是地址是可以改变的。比如c=55, p=&c;是正确的
            但是我们如果写为int const *p 似乎就非常好理解了。就是修饰了*p
         */
         const int* p=&a;
          /*  *p=45; 会报错 */
         p=&c;//正确做法
         //*p=445; 不可更改
         c=43534;//通过原来变量名可更改,相当于通过p指针获得了c变量的可读版本
         int const *ptr=&b;
         /*  *ptr=44; *ptr 是不可更改 */
    
         /* 3、 申明一个常指针变量 也就是说 该指针你只能赋值一次, 且只能在定义时候赋值 ;
            但是指针指向的变量可以改变
            int * const p;
          */
         int* const ptr2=&b;
         *ptr2=3454;
         fprintf(stdout, "%d\n", *ptr2 );
    
         /* 4const int *const p  
            表示p指针是一个常指针变量,同时指向的变量也是常量不可更改
         */
         const int *const ptr3=&c;
        /* ptr3=&a;  错误,ptr3 是常指针变量, 只读的 */
        /* *ptr3=80; 错误,*ptr3 是常量不可更改,只读的 */
        return 0;
    }
    
    
    展开全文
  • 这些显然都是错误的 2. 浮点型计算机中都是近似表示的,比如35.5 其实可能是 34.999675 3. 常量 const 常量一般分为四种常量: 字符常量 const char 整型常量 const int 浮点型常量 const float 字符串常量 const ...

    1.

    中文的汉子和标点符号都是两个字节,不能算一个字符,所以不能属于char类型,更不能写出如下这种命令

    char a = "好" 
    char b = "《"
    

    这些显然都是错误的

    2.

    浮点型在计算机中都是近似表示的,比如35.5 其实可能是 34.999675

    3.

    常量 const

    常量一般分为四种常量:

    字符常量 const char

    整型常量 const int

    浮点型常量 const float

    字符串常量 const char name[10]

    4.

    C语言里其实没有字符串这个数据类型,因此在C语言里的字符串是用字符数组来实现的
    例如:

    char a[21]= "asdfasdfasdf";
    

    5.

    strcpy(str1,str2)
    把str2的内容复制到str1

    6.

    getchar 获取单个字符(不常用)
    gets 获取一行字符串(不常用)
    scanf 获取多个数据时,数据与数据之间用空格隔开

    putchar和puts已经慢慢被遗忘了,就不需要去记住,printf记住就好

    7.

    sizeof有两种用法
    1 sizeof(数据类型) 返回数据类型的字节大小
    2 sizeof(变量) 返回变量的数据类型的大小

    8.

    三元运算符

    c = (a>b)?a:b;

    变量 = (表达式1)?(表达式2):(表达式3)

    意思是变量在表达式1成立的情况下取表达式2的值,不成立则取表达式3
    假如a>b,则c=a;否则c=b

    9.

    switch中case的注意事项

    case后面必须是整数和字符,或者是结果为整数和字符的表达式,但不能包含任何变量。

    switch (result)
      {
        case 10:  printf("..."); break;        // 正确,整数
        case 8+9:  printf("..."); break;       // 正确,表达式8+9==17是整数
        case '5':  printf("..."); break;       // 正确,字符可以转换为整数
        case 'A':  printf("..."); break;       // 正确,字符可以转换为整数
        case 'A'+10:  printf("..."); break;    // 正确,字符可以转换为整数
        case 3.14:  printf("..."); break;      // 错误,不能为小数
        case ii:  printf("..."); break;        // 错误,不能采用变量
      }
    //default不是必须的。当没有 default时,如果所有case都匹配失败,那么就什么都不执行。
    

    10.

    for (语句1;表达式;语句2)
     {
        	语句块
     }
    

    其中表达式不一定要是a[i] < 100这种简单的条件

    可以是一个整型变量,这样可以给变量进行赋值,从而来控制循环的开始和结束

    int STOP = 1;
    for(int i=0;STOP;i=i+2)
    {
    	if(i%19 == 0)
    	{
    		printf("i是19的倍数");
    		STOP = 0;
    	}
    }
    

    其中循环体内也可以加入 continuebreak

    continue 跳转到循环的首部

    break 跳出循环

    展开全文
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂警告信息? 2.7 我遇到这样声明结构代码:structname{intnamelen;charnamestr[1];}...
  •  在C语言中使用词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。 1.标识符  在程序中使用变量名、函数名、标号等统称为标识符。除库函数函数名由系统定义外,其余都由用户自定义。C 规定...
  •  在C语言中使用词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。 1.标识符  在程序中使用变量名、函数名、标号等统称为标识符。除库函数函数名由系统定义外,其余都由用户自定义。C 规定...
  • 2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 2.7 我遇到这样声明结构代码:struct name {int namelen; char namestr[1...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 23 2.7 我遇到这样声明结构代码:struct name {int namelen; ...
  • 后来才知道,%在c语言的printf函数也是一个转义字符,和\一样,比如%d表示输出int类型的数值,%c表示输出char类型数值。而\也是一个转义字符,比如\n表示换行。printf函数在处理转义字符时会检查转义字符后面...

    一开始以为用\%就可以输出%了,但是,用这个方法之后提示下面的错误  

    后来才知道,%在c语言的printf函数中也是一个转义字符,和\一样,比如%d表示输出int类型的数值,%c表示输出char类型的数值。而\也是一个转义字符,比如\n表示换行。printf函数在处理转义字符时会检查转义字符后面的字符,然后对其做出处理。%和\这两个转义字符放在一起时,其行为是没有定义的,因此gcc编译器给出了编译警告,而且生成的程序不能输出正确的结果。

    那么既然\是转移字符并且想要打印\用\\就可以了,那么不如试一下%%来打印%号,


    这样一来果然打印出了%号。

    展开全文
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 23 2.7 我遇到这样声明结构代码:struct name {int namelen; ...
  • 难道在C语言中结构不能包含指向自己指针吗? 1.15 如何定义一对相互引用结构? 1.16 Struct{ }x1;和typedefstruct{ }x2;这两个声明有什么区别? 1.17 “typedefint(*funcptr)();”是什么意思? const...
  • c语言练习题

    2013-01-02 12:08:35
    A) 在C语言中,main函数必须位于文件开头 B) C语言每行中只能写一条语句 C) C语言本身没有输入、输出语句 D) 对一个C语言进行编译预处理时,可检查宏定义语法错误 6、 下列选项中,不能用作标识符是( D )。 A)...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 51 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 52 2.7 我遇到这样声明结构代码:struct name {int namelen; char...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 51 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 52 2.7 我遇到这样声明结构代码:struct name {int namelen; char...
  •  2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法?  2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息?  2.7 我遇到这样声明结构代码:struct name {int namelen; char ...
  • C语言编程要点

    2017-09-18 00:10:37
    16.2. 函数参数类型必须函数参数表或紧跟其后部分说明吗? 217 16.3. 程序必须包含main()原型吗? 218 16.4. main()应该总是返回一个值吗? 219 第17章 用户界面——屏幕和键盘 219 17.1. 为什么直到程序...
  • c语言你知识点总结

    2018-05-15 00:42:54
    0.1在C语言中可以写成.1。 3)实型数据合法形式: a、2.333e-1 就是合法,且数据是2.333×10-1。 b、考试口诀:e前e后必有数,e后必为整数。请结合书上例子。 4) 整型,单精度一般是4个字节, 字符型是1个字节...
  • C语言----数组

    2020-12-08 14:41:57
    2)数组元素内存时连续存储 二一维数组定义: (一)定义:类型说明符+数组名[常量表达式] int a[10]; 备注一:常量表达式必须是大于0 整形常量表达式,不能包含变量,即不允许对数组大小进行...
  • 2.5 在C语言中是否有模拟继承等面向对象程序设计特性好方法? 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂警告信息? 2.7 我遇到这样声明结构代码:struct name {int namelen; char namestr[1...
  • 在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 1.基本数据类型  基本数据类型最主要特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明。 2.构造...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

在c语言中错误的int类型常量是

c语言 订阅