問題:當乙個結構體的成員為指標型別時,為這個結構體申請記憶體時,並不會給指標成員分配記憶體。
程式如下:
#include #include typedef struct example
example_t;
int main(int argc, char** ar**)
printf("%p\n", exam);
printf("%p\n", exam->a);
printf("%p\n", exam->b);
free(exam);
return 0;
}
結果如下:
$ gcc exam.c
$ ./a.out
0x1051150
(nil)
(nil)
可見結構體當指標成員是不會被分配記憶體的。
解決方案:給結構體申請空間的時候,同時給指標成員申請空間
#include #include typedef struct example
example_t;
int main(int argc, char** ar**)
printf("%p\n", exam);
printf("%p\n", exam->a);
printf("%p\n", exam->b);
printf("\n");
exam->a = (int *)malloc(sizeof(int));
exam->b = (char *)malloc(sizeof(char));
printf("%p\n", exam);
printf("%p\n", exam->a);
printf("%p\n", exam->b);
free(exam);
free(exam->a);
free(exam->b);
return 0;
}
結果如下:
$ gcc exam.c
$ ./a.out
0xd8d150
(nil)
(nil)
0xd8d150
0xd8d568
0xd8d578
此時,結構體的指標成員都有被分配記憶體。 C語言訪問結構體成員
c語言中有 和 這兩個運算子都是用來訪問結構體 的。比如有結構體 struct student 並且有兩個變數 struct student zhangsan struct student p p zhangsan 你要留意zhangsan是結構體的名 字,p是指向這個結構體的指標 那麼訪問結構體的...
c語言 得到結構體成員偏移
struct stru printf offset of stru.i ld n size t char s.i char s printf struct stru 0 i ld n size t struct stru 0 i 標準庫中定義了函式offsetof type,member 直接使用即...
結構體指標malloc
有如下結構體型別 typedef struct test,ptest 定義乙個結構體指標,結構體指標指向的元素buffer指向32位元組的字串 ptest pdata pdata test malloc sizeof test 32 此時pdata指向的記憶體空間分配如下 如果需要讀寫buffer指...