知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
typedef問題
1樓
Ealin老師在CH10-2中提到 typedef和#define的差別
#define 是作型別的替換
typedef 是定義一個新型別,
所以
 
typedef char *string_t;
#define string_d char *
 
string_t s1,s2;
string_d s3,s4;
當中, s3為 char * 型態,而s4則為char型態.
這邊觀念我都能理解.
 
但看到如下的程式時,就有些疑惑了
 
typedef char *pstr;
#include <stdio.h>
int main(void)
{
  char string[4]="abc";
  const char *p1=string;
  const pstr p2=string;
  p1++;
  p2++; 出現編譯錯誤, C:\my-devc\typedef.cpp increment of read-only variable `p2'
  return 0;
}
請問,錯在哪呢?這邊的const pstr p2難道和const char *pstr p2是不一樣??
 
 
 
2樓

這是 Ealin 大黑狗老師, 特別去點出"細節", 
 很多人在寫 C , 也許都未曾注意過
 
 

  typedef char *pstr;

  const char *p1=string;    // 宣告一個P1指標,去指向一個const char ,  
                                          //   p1++  --> OK的, 但*p1='S' -->是不OK的 
                      
  const pstr p2=string;    // p2 被宣告成為一個 const, 
                                       // 如同 const int a=5;  

  你若認為   const pstr p2 就是  const char * p2, 代表你認為typedef 是define 的意思