*p++等同于*(p++),二者均为从右向左
NULL和'\0'对指针常量是等价的,只不过用NULL强调指针,或用#define
这样一看才知道大家对空指针的概念如此浑浊哦!!
首先:void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的
类型的指针才可以把内容解释出来.
还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的
意思.
真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:
char* k;这里这个k就叫空指针.我们并未让它指向任意地点.又或者char* k = NULL;这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是'\0'一个空指针我们也无法对它进行取内容操作.空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样k = "hello world!";这时k就不是空指针了. 9.动态数组#include<stdlib.h>int *dynarry=(int *)malloc(10*sizeof(int));如果调用成功,便可dynarry[i](i从0到9)
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 malloc的语法是:指针名=(数据类型*)malloc(长度
),(数据类型*)表示指针.
动态分配数组之后,还可以改变其大小reallocdynarry=(int *)realloc((void *)dynarry,20*sizeof(int));如果能够在原地扩大区域,则返回原来的指针;如果在其他地方,返回新内存区域的地址,原有指针变得不可用;否则一直找不到,返回空指针。因此,一般设置一个临时指针
newarray,if(newarray!=NULL) dynarray=newarray;else{fprintf(stderr,"Can't
reallocate!\n")
fun(int *a)
{ int i=sizeof(a);printf("%d\n",i);}C编译器把数组当做指针,所以返回值是4,不是数组的所占字节数
判断数组定义时有几个元素
int a[10]={13,45};int num=sizeof(a)/sizeof(a[0]//分母或者为sizeof(int),答案均为10
int a[10],*p;
p=a;malloc(sizeof(p))//只能分配四个字节,不是40个字节,返回的只是指针本身的大小char *t=malloc(strlen(s)+1);//有字符串结束标志,malloc返回分配的首地址,strcpy(t,s);最好乘以sizeof(char) 用malloc申请的空间,除非程序退出,否则只能用free释放