1、指针与数组:当数组作为函数参数时,数组名等效于一个指针;
2、sizeof()不是函数,当数组名作为其”参数“时,返回的是数组所占用字节的大小;
3、strlen()是函数,其参数是字符数组名,表示在字符串中 \0前有多少个字符;
4、
int* main(void)
{
int* a = (int*)malloc(10);
// printf("%p\n",a);
// printf("%d\n",*a);
printf("size of a is %d\n\n",sizeof(a));
//a是一个指针,sizeof(a)像相当于表示一个指针型变量占用的字节数大小,在64位系统中为8
int b[5] = {1,2,3,4,5};
printf("sizeof b is %d\n\n",sizeof(b));
//b是数组名,返回的是b这个数组占用的字节大小,5*4 = 20
int *d = NULL;
printf("size of d is %d\n\n",sizeof(d));
//sizeof(d) = sizeof(指针变量)= 8
char c[] = "abcde";
printf("size of c is %d\n\n",sizeof(c));
//sizeof(c),c是数组名,表示c这个数组占用的字节大小为6个
printf("strlen c is %d\n\n",strlen(c));
//strlen是一个函数,strlen(c)= 5
char* e = "abcde";
printf("size of e is %d\n\n",sizeof(e));
//sizeof(e),e是指针,表示指针变量占用的字节大小为8个(因为sizeof不是函数,所以指向字符数组的指针e 和 上面的char c,对sizeof来说不是一样的)
printf("strlen e is %d\n\n",strlen(e));
//strlen是函数,此时数组和指针是同样效果的,所以strlen(e)等效于char e[] = "abcde"中的strlen(e),值为5
return a;
}
sizeof
不是函数,是在编译的时候求值的,所以不能能够动态的确定一个变量的值(所以如果一个指针指向一个数组,sizeof(指针变量)是无法获取这个指针变量指向的数组的大小的,需要显示的传递出来)。只有那些能够通过本文件中的定义能够确定的值才有可能(我说的是有可能)用 sizeof
求的,一般是依赖如何定义一个变量。