1. 指针和数组区别
指针就像有目录的书,要找到里面的内容,只需要去看目录就知道在哪里了。数组的话 就需要找到对应的一页。
`//对于指针变量的定义 初始化
(1)int *p=&b;
(1)int *p;
p=&b
2.对指针的定义
#include<>
int *p = &b;//int 定义时
int *p;p=&a;//定义完了 再用是这样子的
int a[2];int *p;p=a;
2.特别注意 野指针;
int *p;
int a=100;
p=&a;
*p 指向内容 100; p存放的是 a 的地址;
p++; 是按照数据类型字节大小 ++的;
```c
在这里插入代码片
3.删除空格
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p,*q;
char buf[64];
p = q = &buf[0];
fgets(buf,sizeof(buf)-1,stdin);//标准输入
while(*p ! = '\0'){
if(*p != ' ')
*q++ = *p;// ++ 使用了*q 后再++;
p++;
}
*q = '\0';
puts(buf);
getchar();
return 0;
}
//另外一种方法
#include<stdio.h>
#include<stdlib.h>
char * func(char *str)
{
char *p, *q;
p = q = str;
while (*p != '\0'){
if (*p != ' ')
*q++ = *p;// ++ 使用了*q 后再++;
p++;
}
*q = '\0';
return str;
}
int main()
{
char *p, *q;
char buf[64];
fgets(buf, sizeof(buf)-1, stdin);//标准输入
func(buf);
puts(buf);
getchar();
return 0;
}
4.Character compression procedure-- 字符串压缩程序
#include<stdio.h>
int main()
{
char *p,*q;
char str[256],pstr[256];
p = q = &str[0];
int count=0;
int j=0;
fgets(str,sizeof(str)-1,stdin);
while(*p != '\0')// When to end the program
{
while(*p == *q)// p pointer move,match q pointer which don't move.
{
count++;
p++;
}
if(count != 1)
{
pstr[j++]=count+'0';//给char 数组赋值时 int+'0' =a[i];不要这一行 可以去掉压缩时候前面的数值;
pstr[j++]=*q;
}
else
{
pstr[j++] = *q;
}
count =0;
q = p;
}
*p='\0';
pstr[j]='\0';//终止多余的输出
puts(pstr);
return 0;
}
5.压缩相同字符 abbcdb --> abcd
3
3.1压缩字符串 aabb--> ab -->对应2代码
3.2压缩相同字符 abbcdb --> abcd
//3.2
#include<stdio.h>
int main()
{
char *p,*q,*r;
char buf[64];
p = q = r = buf;
int flog=0;//judged that the characters have appeared before?
fgets(buf,sizeof(buf)-1,stdin);
while(*p != '\0')//Traverse the buf
{
flog = 0;
r = buf;
while(r != q)
{
if(*r == *q)
{flog = 1; break;}// the character appear before then set flog = 1
r++;
}
if(flog == 0)
{
*q++=*p;
}
p++;
}
*q = '\0';
printf("%s \n",buf);
return 0;
}
6.指针数组,数组指针、、
#include<stdio.h>
int main()
{
int a[3][4];
int(*p)[4];//数组指针
int *q[3];
int i=0, j=0;
p = a;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
*(*(p + i) + j) = (i + j) * 10;
}
}
q[0] = a[0];//指针数组
q[1] = a[1];
q[2] = a[2];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("a[%d][%d]=%d\n",i,j,*(q[i]+j));
}
}
getchar();
getchar();
getchar();
return 0;
}
为什么指针大小是固定的
> **32位的机器,当然要开一个指针占用32bit=4B才能保存所有的地址都能记录。64位的机器,要开一个指针占用64bit=8B才能保存所有地址.
> yyxyxyyyy![在这里插入图片描述](https://img-blog.csdnimg.cn/948e1dca46f74b9da6e4f9366d56fe61.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bGx54yq5YS_,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center)
## 指针理解
head 0xf3
| 0x01 |
&head=0xf3;
*head=0x01;
**head=0x01 对应的内容;
![在这里插入图片描述](https://img-blog.csdnimg.cn/edaba41ffb494de6ab7e411f85c963df.png)