*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釋放