[Syntax] typedef & const

略: typedef 和 #define 的比较

  • #define 是编译预处理时执行,会进行简单替换
  • typedef 是在编译时期处理,晚于#define

情形1

    const char *p1;
    char const *p2;
    p1 = p2 = "指针可变,指向内容不可变";
    char * const p3 = "指针不可变,指向内容可变";

    /**
     *  Error Code Below
     *  p1[0] = ‘x‘;
     *  p3 = "xxx";
     */

    printf("p1 = %s\np2 = %s\n", p1, p2);
    printf("p3 = %s\n", p3);
  • const在指针左侧,const修饰指针指向的内容
  • const在指针右侧,const修饰指针本身,且需要在定义时初始化

情形2

    typedef  char * pstr;

    const char * p1 = "abcde";
    const pstr p2 = "abcde";

    p1++;
    /**
     *  Error Code Below
     *  p2++;
     */
    printf("p1++ = %c\n", *p1);

可以发现,“const pstr p2” 这句,const 修饰的是指针本身,而不是指针指向的内容,原因在于:

pstr 被我们 typedef 成了一个新的类型,它和 const int p2 没有区别,const 修饰的就是p2自身,而p2的类型是pstr,psrt则是我们创造的类型,是一个指向char的指针。

时间: 2024-10-07 22:33:42

[Syntax] typedef & const的相关文章

typedef 和 const

1. typedef 允许你为各种数据类型定义新名字 #include <stdio.h>typedef char *ptr_to_char; //这让我看起来,好奇怪,不好读void main(){ char a = 'c'; //char *b = &a; ptr_to_char b; b = &a; printf("%c\n", *b);} 2. 常量的值无法修改 int const a; const int a; 两者都可以,但是一般采取第一种,可读

C++ typedef与const

1.typedef 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间:  typedef     int        INT; struct tagNode { char *pItem; struct tagNode* pNext; }; typedef struct tagNode* pNode; 2.const const常量存在于程序的数据段,是一个常数值.

[C++] typedef和const

如果某个类型别名指代的是符合类型,那么把它用到声明语句中可能会让人误解.比如如下的类型pstring,实际上是char*的别名: typedef char *pstring; const pstring cstr = 0; // cstr是一个指向char的常量指针 const pstring *ps; // ps是一个指针,它的对象是指向char的常量指针 上述两条声明语句的基本数据类型都是const pstring,const是对给定类型的修饰.pstring实际上是指向char的指针,因此

【C++】typedef与const的纠纷

const和 define在常量定义上的问题 在C++中,我们都鼓励使用const定义常量,而不是宏define.原因有很多. 一.const比define更优雅,更符合符号常量的本意. 二.define用在复杂的代码中,不理解define的实质的人就会出问题.define是代码字面上的替换,预处理阶段还原替换的内容.而typedef是包装已经存在的类型(或者复合类型),定义新的原子类型. #include<iostream> #define DAYS 365 const int MONEY

typedef 自定义 const define

typedef list<CNewParRange> ParList; const CString C_Pos_Start_Completion[] = { _T("M2208"), _T("M2240"), _T("M2272"), _T("M2304"), _T("M2336"), _T("M2368"), _T("M2400"), _T("

const和typedef的常见用法详解

一.说说const 一般而言,const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量. 常见用法如下: 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改, 则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护 void  fun1(con

[转]不能将参数1从“const char []”转换为“LPCTSTR

今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集就ok了.原因: typedef   LPCTSTR    LPTSTR ; #ifndef   _UNICODE    typedef   TCHAR   char;    #else    typedef   TCHAR   w

基于typedef的用法详解【转】

也许新手用这个关键字不多,但它却是一个很有用的关键字,可以使代码模块化程度更好(即与其它代码的关联较少),在C++中还是实现Traits技术的基础,也是模板编程的基本语法之一. 若说变量定义是为变量命名,而typedef(或称为类型定义)就是为类型命名.既然都是命名,那就会有很多类似的地方.而变量定义我想大家都会使用,因此类型定义也必然会使用. 类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型.如,下面的变量定义:in

C 中typedef 函数指针的使用

类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer;   //整型指针变量int array [5]; //整型数组变量int *p_array [5]; //整型指针的数组的变量int (*array_pointer) [5];//整型数组的指针的变量int function (int param);//函数定义,也可将函数名看作函数的变量int