Home 綜合 c語言結構體宣告中const成員如何初始化

c語言結構體宣告中const成員如何初始化

0

  因為你定義的const結構體變數是全域性變數屬於靜態儲存區只能賦值常量值不能賦值變數

  c語言的任何const變數都不能用const變數初始化,這是c語言和c++的一個很大的不同……

  //估計是你的分號問題,不能是中文符號,程式只支援英文符號#include

  typedef const structa ;

  int main()

  ;printf(“a=%d
” , a.n );

  system(“pause”);

  return 0;

  }以上在windows dev c++編譯器下測試通過

  const成員必須在定義的時候同時初始化,而不能在後續再進行賦值。

  結構體定義時初始化的方法為:

  struct type_name var_name = ;

  其中type_name為結構體型別名,var_name為結構體變數名。=後面的大括號中,是各個成員變數的初始化值,根據成員變數的定義順序一一對應。在初始化變數表內沒有顯式定義的,系統預設初始化值為0。

  學習了c語言結構體變數儘量不要用const

  c語言的任何const變數都不能用const變數初始化,這是c語言和c++的一個很大的不同……

  c語言結構體變數儘量不要用const

  定義的時候直接初始化

  還可以這樣

  typedef struct _struct_vstruct_v;

  struct_v a;

  初始化a.num = 7;

  a.flag = 1;

  逐個初始化

  終極辦法 memcpy

  c語言結構體成員指標初始化問題

  一中只是將name指向“jim”所在的空間,”jim“已經存在了,直接將指標指向他即可,而二中是複製一個”jim“到name所指向的空間,沒有初始化當然不行

  第一個”jim”返回的是一個地址,是正確的。第二個記憶體分配小了。

  問題:(一)中的student.name並未初始化,為什麼能賦值成功?

  stu.name = “jim”; “jim”; 是字串常量,系統自動為他分配了記憶體並儲存這些字元,執行賦值操作是,將這個字串的首地址複製給 stu.name。

  (二)偶用strcpy_s函式時有疑問,strcpty(str1,int,str2)中 sizeof(str1)>int&&int>sizeof(str2)

  strcpy_s和strcpy()函式的功能幾乎是一樣的。strcpy函式,就象gets函式一樣,它沒有方法來保證有效的緩衝區尺寸,所以它只能假定緩衝足夠大來容納要拷貝的字串。在程式執行時,這將導致不可預料的行為。

  用strcpy_s就可以避免這些不可預料的行為。

  這個函式用兩個引數、三個引數都可以,只要可以保證緩衝區大小。

  三個引數時:

  errno_t strcpy_s(

  char *strdestination,

  size_t numberofelements,

  const char *strsource

  );兩個引數時:

  errno_t strcpy_s(

  char (&strdestination)[size],

  const char *strsource)

  例如:char *str1=null;

  str1=new char[20];

  char str[7];

  strcpy_s(str1,20,”hello world”);//三個引數

  strcpy_s(str,”hello”);//兩個引數但如果:char *str=new char[7];會出錯:提示不支援兩個引數

  c語言結構體裡的結構體怎麼初始化

  這樣初始化理論上是可行的,你用的編譯器應該是vc++6.0吧!主要是vc++6.

  0這個編譯器不支援這樣的初始化!只能一個一個初始化,比如sub[0].subject=”高階語言程式設計”,這樣!

  struct?subject

  sub[4];

  int?main()//一個結構體裡面不能再定義另一個結構體還有問題的話可以追問!

  struct?studentgrade

  sub;

  這樣就可以了,用的時候sub.加上元素名就可以了 比如sub.num ? ? sub.name ?這樣就可以了

  直接給結構體變數的成員賦值就行

  比如p.name=”張三”;

  p.age=30;這樣

  另外,也可以一次性把所有成員的值全賦給結構體變數,不過跟陣列一樣要用大括號,比如

  p=;這樣子

  中間又有結構體巢狀,你的格式應該是..},..},…}

  其實一般不這麼初始化,定義全域性靜態變數或者指標,指標的話通過malloc分配記憶體,然後通過->訪問結構體成員,靜態變數的通過.訪問成員,然後賦值。

  struct studentgrade sub[4]

  這樣宣告看看

  subject sub[4]你這個之間都有空格