1.sizeof()函数的一些思考
测试代码如下:
#include <stdio.h> #include <stdlib.h> int main(void) { int* nptr1; int* nptr2 = NULL; int* nptr3 = malloc(5*sizeof(int));//重点是这个,sizeof(nptr3)求得的长度是4 int nptr4[5]; int nptr5[5] = {1,2,3,4,5}; int length1 = sizeof(nptr1); int length2 = sizeof(nptr2); int length3 = sizeof(nptr3); int length4 = sizeof(nptr4); int length5 = sizeof(nptr5); printf("length1 = %d\n", length1); printf("length2 = %d\n", length2); printf("length3 = %d\n", length3); printf("length4 = %d\n", length4); printf("length5 = %d\n", length5); return 0; }
结果如下:
结论:
int* nptr3 = malloc(5*sizeof(int)); // sizeof(nptr3)求得的长度是4,因为只是定义个一个int型指针,所以长度是4
int nptr4[5]; // sizeof(nptr4)求得的长度是20
sizeof()这个函数到底是怎么实现的,为什么sizeof(nptr4)是20,为什么sizeof(nptr3)是4,难道地址和地址还不一样?
2.地址里到底存了哪些信息
为什么sizeof()的长度会不一样,地址和地址不一样,还是地址里存有长度信息?