sizeof和mallo

*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(长度

),(数据类型*)表示指针.


动态分配数组之后,还可以改变其大小realloc
dynarry=(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释放

上一篇:三种方法求组合偶数字


下一篇:两种选择排序法