-
二維數(shù)組
int a[ ][3]={1,2,3,4,5,6,7,8,9};
int a[ ][3]={1,2,3,4,5};
int a[ ][3]={0};```
* ##指針
* ####指針類(lèi)型是一種特殊類(lèi)型
```DataType *name
DataType* name
DataType * name```
以上寫(xiě)法都可以
----指針和普通變量的區(qū)別
1. 指針:存地址
2. 普通變量:存值
3. 指針只能
----初始化
`int *p=NULL;`
```int a=3;
int *pa=&a;```
```int *pb;
pb=&a;```
```// int *pc
//*pc=&a; 這種是錯(cuò)誤的!```
----星號(hào)間接訪問(wèn)
`int *p,a=6;`
`p=&a;`
`printf("*p=%d",*p);`
`int *p=NULL;`
`printf("p=%p\n",p);`
`//printf("*p=%d\n",*p); 這是錯(cuò)誤的,p里面是空地址,*p不能被訪問(wèn)。`
----指針本身也有地址,指針變量是存儲(chǔ)別的變量的地址。
----不能將常量直接賦值給指針變量。
----把指針變量賦值給同類(lèi)型指針是可以的。不同類(lèi)型的指針如果想賦值必須要強(qiáng)制類(lèi)型轉(zhuǎn)換(char *p=(char *)p1).
----指針的大小:指針不同類(lèi)型的大小都一樣的(32位機(jī)為4字節(jié),64位機(jī)為8字節(jié))
* ####指針的類(lèi)型和指針?biāo)赶虻念?lèi)型
int *pa;(int* pa;)
double *pd;
----指針的類(lèi)型:去掉變量名之后的部分
----指針?biāo)赶虻念?lèi)型:去掉指針變量名和其前面的 *
* ####指針與數(shù)組
----數(shù)組名是一個(gè)地址
int a[5]={1,2,3,4,5};
int *p;
p=&a;
----(p+1)是等價(jià)于(a+1);等價(jià)于(a[2])
----數(shù)組元素的訪問(wèn)
int a[5]={1,2,3,4,5};
int *p=&a;
a[0];a[3];
*(a);*(a+3);
*(p);*(p+3);
p[0];p[3];
* ####野指針:沒(méi)有初始化,或者其指向的內(nèi)存被釋放,而且指針沒(méi)有被置空
----危害:造成系統(tǒng)資源的浪費(fèi),容易造成未知的致命錯(cuò)誤。
* ####指針地址的運(yùn)算
----自增:指針向高地址方向移動(dòng)
----自減:指針向低地址方向移動(dòng)
移動(dòng)的字節(jié)數(shù)是指針?biāo)赶驍?shù)據(jù)類(lèi)型的大小。
* ####概念區(qū)分
int a[3]; 為數(shù)組,存放三個(gè)int型變量
int *p; 指針,其類(lèi)型為int型
int *p[3]; 指針數(shù)組
int (*p)[3] 數(shù)組指針 又稱(chēng)行指針。
int a[4]={1,2,3,4};
int *p1[4];
int (*p2)[4];
int i=0,j=0;
for(i=0;i<4;++i)
{
p1[i]=&a[i];
}
p2=&a;
printf("%d\n",*p1[2]);//3
printf("%d\n",(*p1)[1]);//2
int array[3][3]={1,2,3,4,5,6,7,8,9}
int (*pc)[3]=array;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%4d ",pc[i][j]);
* #### 二維指針
DataType **PointorName;
int a=10;
int *p=&a;
int **p1=&p;
printf("&a=%p\n",&a);
printf("p=%p\n",p);
printf("&p=%p\n",&p);
printf("pa=%p\n",&pa);
printf("*p=%p\n",*p);
printf("**p=%p\n",**p);
##作業(yè):
1.數(shù)組整和
include <stdio.h>
int main(int argc,char argv)
{
char a[10]="hello",b[10]="world",c[16];
char p=&a,p1=&c;
int i,n=0,j;
for(;;)
{
if(p=='\0')
break;
p1=p;
++p1;
++p;
++n;
}
p=&b;
for(;;)
{
if(p=='\0')
break;
p1=p;
++p1;
++p;
++n;
}
printf("a[10]={hello} b[10]={world}\n");
for(i=0;i<n;i++)
printf("%c",c[i]);
printf("\n",c[i]);
return 0;
}
2.查找數(shù)
include <stdio.h>
int main(int argc,char argv)
{
int a[5]={1,3,5,7,9},i,b=0;
int p=&b;
scanf("%d",&p);
for(i=0;i<5;i++)
if(p==a[i])
{
printf("已查找到%d,該數(shù)在第%d位。\n",p,i+1);break;
}
else if(i==4)
printf("查找不到信息!\n");
return 0;
}
3.列出數(shù)組中個(gè)字符
include <stdio.h>
int main(int argc,char argv)
{
char a[50],p=&a;
int i,n=0,x,sum=0;
for(;;)
{
scanf("%c",&p);
if(*p=='\n')
break;
++p;++n;
}
p=&a;
x=0;
for(i=0;i<50;i++)
{
if((*p>='a')&&(*p<='z'))
x++;
++p;
}
n-=x;
printf("小寫(xiě)字母有%d個(gè)\n",x);
p=&a;
x=0;
for(i=0;i<50;i++)
{
if((*p>='A')&&(*p<='Z'))
x++;
++p;
}
n-=x;
printf("大寫(xiě)字母有%d個(gè)\n",x);
p=&a;
x=0;
for(i=0;i<50;i++)
{
if((*p>='0')&&(*p<='9'))
x++;
++p;
}
n-=x;
printf("數(shù)字有%d個(gè)\n",x);
p=&a;
x=0;
for(i=0;i<50;i++)
{
if(*p==32)
x++;
++p;
}
n-=x;
printf("空格符號(hào)有%d個(gè)\n",x);
printf("其他符號(hào)有%d個(gè)\n",n);
return 0;
}