C语言指针入门(二)
来源:互联网 发布:鼻子丑怎么办 知乎 编辑:程序博客网 时间:2024/04/25 13:29
指针
1. 指针是什么?起什么作用?
指针是变量的一种,里面是一个地址,通过这个地址找到要找的数据
实质:单元的地址就是指针内容
2. 指针运算符
&是取地址的运算符,*是表示指针运算符
例:
int *p1,a;
p1=&a;
*p1=3;
例题:
#include<stdio.h>
int main()
{
int *p;
int a=3;
p=&a;
printf("%d",*p);
}
输出结果:3
3. 指针作函数参数
注意:变量的地址赋予指向相同类型的指针变量
4. 指针运算——赋值运算
int*p=&a;等价于int *p,p=&a;
在定义时为取地址,p为地址变量
在赋值时为取出地址中的值
例题:
int main()
{
inty=0,x=3;
int*px=&x;
m=*px+5;
y=++*px;
printf("%d\t",m);
printf("%d",y);
}
运行结果:8 4
int main()
{
inty=0,x=3;
int*px=&x;
y=*px++;
inta=*px;
printf("%d",a);
}
运行结果:3
要点:运算符优先级
例题:
int main()
{
inta[5]={1,2};
printf("%d,%d",sizeof(a),*a);
}
运行结果:20,1
例题:
int main()
{
chara[5]={'a','b'};
char*p=a;
printf("%d,%d,%c\t",sizeof(*a),sizeof(a),*a); // *a指向首地址,可用sizeof(a)/sizeof(*a)计算数组长度
printf("%d,%d",sizeof(char *),sizeof(p));
}
运行结果:1, 5,a 4,4
int main()
{
char a[100];
scanf("%s",a);//* gets(a)
for(i=0;i<sizeof(a)/sizeof(*a);i++)
sizeof(a)/sizeof(*a)=100,因为a与char相等,char已经分配了100个内存单元。
例题
#define DIM(s) sizeof(s)/sizeof(*s)
int main()
{
char *p;
char s[6]={'h','e','l','l','o'};
char *pBegin=s;
char *pEnd=s+DIM(s);
for(p=pBegin;p<pEnd;p++)
{
printf("%c",*p);
}
}
运行结果:hello
例题:
int main()
{
inta[5]={1,2};
int*p1=&a[0]; /* int*p1,*p2;p1=&a[0],p2=&a[1];*/
int*p2=&a[1]; /* int*p1,*p2;*p1=a,*p2=a+1;*/
printf("%d",p1-p2); /* int *p1;int *p2=p1+1; p2=p1+1; */
}
运行结果:-1
NULL(自学,书上)
5. 用指针引用数组元素
若指针变量p已经指向数组中的一个元素,则p+1指向同一数组的下一个元素。
例: p的初值为&a[0]
p+i和a+i都是a[i]的地址
*(p+1)和*(a+1)都是p+i和a+i所指向的数组元素,即a[i]
*(p+5),*(a+5)就是a[5]
例题:用指针完成插入(for循环)
#include<stdio.h>
int main()
{
char c[100]={'a','b','c','e','f'};
int i;
char *p=&c[99];
for(i=99;i>2;i--)
{
*p--=*(p-1);
}
p++;
*p='d';
printf("%s",c);
}
运行结果:abcdef
例题(while循环):
int main()
{
char a[10]={'a','b','c','e','f','g'};
char *p=a;
while(*p!='g')
{
p++;
}
p++;
while(*p!='c')
{
*p--=*(p-1);
}
p++;
*p='d';
printf("%s",a);
}
运行结果:abcdefg
例题:用指针完成复制
#include<stdio.h>
int main()
{
char a[400]={'a','b','c','d'};
char b[4000];
int i=0;
char *pa=a,*pb=b;
while(a[i]!='\0')
{
*pb++=*pa++;
printf("%c",*(--pb));
i++;
}
}
运行结果:abcd
指针应用注意事项(规范):
(1)int *p=NULL;
(2)*p/p,*为取值符,后面一定加地址
(3)确认指针循环走到哪里
(4)++*p,*p++;
(5)Scanf(“%d”,&m);
(6)*p=*(p--)
字符串与字符数组的区别
(1)char *p=’abcdefg’;
sizeof(p)=4
(2)字符串常量可以被访问,除此之外都不可以,可以遍历,不可以修改。
- C语言指针入门(二)
- C语言指针(二)
- C语言指针(二)
- c 语言入门指针
- C语言指针入门
- C语言指针入门
- C语言 指针入门
- C语言(二)指针
- C语言------指针(二)
- C语言指针(二)
- C语言入门-指针入门
- C语言指针教程----入门到精通<二>
- C语言指针(二)指向指针的指针
- C语言入门(十七)指针概念
- c语言—指针(入门1)
- C语言指针入门(一)
- C语言指针入门(三)
- C语言指针入门(四)
- **Leetcode 72. Edit Distance
- 机器人的人工智能与伦理道德
- oracle表示百分数,加减,统计
- Shell(三)
- logback 配置详解(一)
- C语言指针入门(二)
- hibernate系列十二:延迟加载
- 面试新的体会(第一天)
- Boot流程
- php将图片以二进制形式保存到mysql数据库的解决方法
- Qt Creator(mingw)下编译和配置OpenCV
- 【Android】Android 7中logcat读logdr的处理
- 单例模式
- Java Servlet(三) 监听器