眼部整形

注册

 

发新话题 回复该主题

C语言基础知识之一文带你辨析指针 [复制链接]

1#

辨析int*p[4]与int(*p)[4]

前者指:根据运算优先级,前者相当于int*(P[4]),即相当于是一个指针数组(数组内含有4个指针分别为*(p[0]),*(p[1])等)),归根其还是数组

后者指:*p表示是(*p)[4]的首地址,*p表示p指向的内容,即*(*p)是(*p)[0]的值,*(*p+1)是(*p)[1]的值。为数组指针(是指针),p相当与一个二维指针。例如:inta[2][3]中a[2]是a[2][]的地址*(a[2]+2)表示(a[2]+2)指向的内容是a[2][3]的值,只不过此时a[2]为指针。

指针函数与函数指针

指针函数:指带指针的函数,本质是一个函数。

函数指针:指向函数的指针,指针变量指向函数,本质是指针。

strcmp(str1,str2)函数,用来比较两个字符串的大小(从左到右逐个字符比较)

当s1s2时,返回值0s1=s2时,返回值=0s2时,返回值0

指向指针的指针:

eg:char**p;

char*a[]={gggdfd,fffeee,hhhhhh};

char**p;//p=ap指向a的首地址,*p就相当于a[]

inti;

for(i=0;i3;i++){

p=a+i;//i==1是p指向g首地址,i==2时p指向f首地址....

printf(%s,*p);//i==1时,*p相当于gggdfd的值

}

第四个:int*p[n]先有p[n]=t然后才有int*t,顾有指向整形数据的指针(p[n])元素组成。

int(*p)[n]:*p的值为(*p)[n]的地址,所以p指针为指向数组的指针变量(例如int*p为指针变量)

int*p():先p()函数后得到一个返回值(int*p)为指针,该指针(int*p)为指向整形数据的

int(*p)():p指向的是(指向的内容)(),所以*p指向的内容是函数,该函数返回的值是整形的

int**p:p指向的是int*t(int*t==int**p)中的t,所以为p指针为指向一个指向整形数据(int*t)的指针(int*p)

void*p;void指针为指向任何类型数据的指针,变量p不指向一个确定的数据类型,任何类型的指针可直接给void指针赋值,若是要给void指针的值赋给其他类型的指针,则需要强制转换。

void*p1;

int*p2;

p1=p2;//正确而不能p2=p1;

分享 转发
TOP
发新话题 回复该主题