iOS开发视频教程《C语言基础》

iOS开发视频教程《C语言基础》

3 (1人评价)
  • 课时:(35)

  • 学员:(174)

  • 浏览:(10742)

  • 加入课程

千锋3G学院-C语言基础视频教程-第05讲-指针(2)的笔记

相关课时: 笔记详情:

指针通常和数组一起使用;

//单独的数组名,如a相当于第一个元素的地址,即&a[0];

数组名是数组的首元素地址。

指针变量+1,其结果相当于加1个其指向的字节数;

int *p=(int *)5;p++;

最后p==9;//int类型占4个字节;

char *q=(char *)5;q++;p==6;

 

  1.  int a[10]={};
  2. int *p = a;
  3. int i;
  4. for(i=0;i<10;i++){
  5. scanf("%d",a[i]);//这里的a[i]可以换成p+i;因为p+1的地址就是a[1]的地址...    换成p+i,只是把每个元素的地址取出来,如果要取元素,就要写成*(p+i);
  6. }
  7. return 0;

每次都用*(p+i);取值!特别麻烦,这时人们就就发明了一个代替+i取* 的运算符;就是中括号运算符;

*(p+3)=0;代表p[3]=0;

*(p+n)==p[n];

 

数组中也一样适用:

a[3]=9;     相当于*[&(a[0])+3]=9;即*(p+3)=9;

 

int main(){

int a[4]={1,3,4,5};

printf("%d",a[3]);

printf("%d",3[a]);

//两者相等;因为中括号运算符;

//a[3]==*(a+3);

//3[a]==*(3+a);

}

指针是地址变量;

数组名是地址常量;

它就代表着a[0]的地址,这也就解释了,数组为什么不能整体赋值;

int main(){

int a[10]={1,2,3,4,5};

int *p=a;

a[1]=2;

*(a+1)=2;

*(p+1)=2;

p[1]=2;

}

上边四个式子都一样,因为 方括号运算符本身就是+i取*

 

 

 

 

0 0

你感兴趣的课程

5万+浏览/ 1766学员/ 3.8评分
免费
5万+浏览/ 926学员/ 4.5评分
免费