const
int nvalue; // nvalue是const
const
char *pcontent; // *pcontent是const, pcontent可變
const
char* const pcontent; // pcontent 和 *pcontent都是const
int
const nvalue; // nvalue是const
char
const * pcontent; // *pcontent是const, pcontent可變
char* const pcontent; // pcontent是const, *pcontent可變
char
const* const pcontent; // pcontent 和 *pcontent都是const
根據上面的例子和注釋簡單總結為:const跳過其後的資料型別修飾其後的變數(括號可以限定修飾範圍)。
如上面的const char *pcontent; 語句,const修飾後面的「*pcontent」,故而*pcontent是const的;通過結構體指標變數獲得其結構體變數的成員變數有兩種方式:又如語句「char* const pcontent; 」,const修飾其後的「pcontent」,故而pcontent是const的。
其中,「.」為取結構體成員變數的運算子。
另外c語言中引入了新的運算子「->」用於結構體指標變數直接獲得結構體變數的成員變數
typedef struct birthday
birthday_t;
typedef struct stu
stu_t;
int main()
; stu_t *pstu; /*定義結構體型別指標*/
//pstu = malloc(sizeof(stu_t)); /*為指標變數分配安全的位址*/
printf("input name, number, year, month, day:\n");
scanf("%s", student.name);
scanf("%ld", student.num);
...pstu = &student;
student.name = "wangerqiang" /* error */
...}
(*pstu).num = student.num
;(*pstu).birthday
.year = student.birthday
.year
;等價於
pstu->num = student.num
;pstu->birthday.year = student.birthday
.year
;
另外語句student.name = 「wangerqiang」編譯報錯,需要注意的是student.name是陣列名,代表陣列的首位址(位址常量),給常量賦值是非法的。
int main()
; stu_t *pstu; /*定義結構體型別指標*/
...pstu = &student;
...pstu++;
...}
以上程式對結構體陣列student元素的引用可採用三種方法:
student+i和pstu+i均表示陣列第i個元素的位址,陣列元素成員的引用形式為:
(student+i)->name, (student+i)->num 和 (pstu+i)->name, (pstu+i)->num等.
student+i 和 pstu+i 及 &student[i]意義相同。
若pstu指向陣列的某乙個元素,則pstu++
就指向其後續元素。
pstu = &student,pstu指向陣列student,pstu[i]表示陣列的第i個元素,其效果與student[i]等同。
對數組成員的引用描述為:pstu[i].name, pstu[i].num。
typedef
struct
u16bitfield_type;
typedef
struct
u8bitfield_type;
int main()
; u8bitfield_type struc8 = ;
unsigned
short *pu16 = null;
unsigned
char *pu8 = null;
struc16.u16_1 = 0x0a98;
struc16.u16_2 = 0x000f;
pu16 = &struc16;
struc8.u8_1 = 0x3a;
struc8.u8_2 = 0x03;
pu8 = &struc8;
printf("struc16.u16_1:0x%x struc16.u16_2:0x%x *pu16:0x%x \n", struc16.u16_1, struc16.u16_2, *pu16);
printf("struc8.u8_1:0x%x struc8.u8_2:0x%x *pu8:0x%x \n", struc8.u8_1, struc8.u8_1, *pu8);
return
0;}
結果是*pu16 = 0xfa98; *pu8 = 0xfa;
注:測試處理器環境為小端
const修飾指標
1.指向const資料的非const指標 const int countptr 這個宣告從左到右讀,countptr 是乙個指向整數常量的指標 2.指向非const資料的const指標 int const ptr x 這個ptr指標就是const指標,宣告為const的指標必須在宣告時進行初始化。指...
const修飾指標
書寫形式為 int countptr 特點 指標的指向可以被修改,指向的資料可以被修改 includeint main 書寫形式為 const int countptr 特點 指標的指向可以被修改,指向的資料不能被修改 includevoid func const int int main void...
C 指標基礎之const修飾指標
一.const修飾指標有三種情況 1.const修飾指標 常量指標 2.const修飾常量 指標常量 3.const既修飾指標又修飾常量 二.特點 常量指標 指標的指向可以修改,但是指標指向的值不可以修改。int a 20 const int p a 常量指標指標常量 指標的指向不可以修改,但是指標...