自己关于C语言指针的理解

本文详细介绍了C语言中指针与数组的区别,包括它们的定义、使用方式以及指针的递增操作。通过示例代码展示了如何进行字符串压缩和去除空白字符。同时,解释了指针大小在不同位宽机器上的固定性,并探讨了指针数组和数组指针的概念。文章还提供了多个实际操作示例,如字符串压缩和查找重复字符,帮助读者深入理解指针的运用。
摘要由CSDN通过智能技术生成

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值