首页 > 其他分享 >指针初阶

指针初阶

时间:2023-01-30 18:36:59浏览次数:52  
标签:arr 初阶 int char str printf 指针

定义

在64位中, 指针是8个字节
在32位中,指针是4个字节

因为8个字节是

指针类型的意义

  1. 指针类型决定了:指针解引用的权限有多大
  2. 指针类型决定了,指针走一步,能走多远(步长)
#include <stdio.h>
// 2的代码
int main()
{
	int arr[] = { 1,2,3 };
	int* p = arr;
	char* pc = arr;

	printf("%p\n", p);
	printf("%p\n", p + 1);
	
	printf("%p\n", pc);
	printf("%p\n", pc + 1);
}

1

指针的运算

指针+-整数

C语言C++语言规定,一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。这样就保证了p+i指向p下面的第i个元素。

随着数组下标的增大,地址也跟着增大!

指针 +-指针

int main()
{
	int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
	int* pa = arr;
	printf("%d\n", arr[9] - arr[0]);
	return 0;
}
// 结果是9

指针-指针得到的是两个指针之间的元素个数

// 重写 strlen()
int MyStrlen(char* str)
{
	char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return (str - start);
}

int main()
{
	char str[] = "abc";
	printf("len=%d\n", MyStrlen(str));
	return 0;
}
// 结果是len=3

指针+指针没有什么意义

二级指针

指针数组

int *parr[];		// 整形指针的数组
char *parr2[];

标签:arr,初阶,int,char,str,printf,指针
From: https://www.cnblogs.com/liuuu/p/17076929.html

相关文章

  • 【双指针】LeetCode 18. 四数之和
    题目链接18.四数之和思路与【双指针】LeetCode15.三数之和思路相似,但是要注意测试用例可能溢出,需要转换为long代码classSolution{publicList<List<Inte......
  • 【双指针】LeetCode 16. 最接近的三数之和
    题目链接16.最接近的三数之和思路借鉴【双指针】LeetCode15.三数之和的思路,只不过把0换成target代码classSolution{publicintthreeSumClosest(int[]n......
  • 快慢指针-牛客题霸模板速刷(BM6、BM7、BM8)
    快慢指针是指在链表或其他遍历对象中,通过两个相同方向的指针,即快指针和慢指针,以不同的速度遍历,从而实现寻找某个结点的目的。BM6-判断链表中是否有环题解:想象在环形跑道......
  • 指针求字符串长度
    因为这里需要一个start来存首地址然后end来判断是不是最后一个地址然后做指针的相减找中间元素个数#include<stdio.h>intmy_strlen(char*str){char*start=str;char*e......
  • 【双指针】LeetCode 167. 两数之和 II - 输入有序数组
    题目链接167.两数之和II-输入有序数组思路本思路来自一张图告诉你O(n)的双指针解法的本质原理(C++/Java)下图是白色部分初始的搜索空间,即A[0]+A[7]假如targ......
  • 【双指针】LeetCode 647. 回文子串
    题目链接647.回文子串思路使用中心扩散法解决,在【双指针】LeetCode5.最长回文子串的代码上稍作修改即可。代码classSolution{publicintcountSubstrings......
  • 【双指针】LeetCode 5. 最长回文子串
    题目链接5.最长回文子串思路1:中心扩散法遍历字符串s,对于每个字符都以它为中心向两边扩散,测得最长回文子串。注意:在扩散的过程中要分回文串长度奇偶进行扩散,因为长度......
  • 带你深入了解指针(2)
    本篇文章继续与大家讲讲指针的一些知识,不过呢,在讲之前,分析一下以下两串代码,简单的检测一下我们的学习效果。检测第一串代码:(*(void(*)())0)()(*(void(*)())0)()//......
  • 【双指针】LeetCode 680. 验证回文串 II
    题目链接680.验证回文串II思路题目允许删除一个字符,那么当我们判断到一对字符不相等时,可以分别判断区间\([left+1,right]\)和区间\([left,right-1]\)是否能......
  • 【双指针】LeetCode 125. 验证回文串
    题目链接125.验证回文串思路简单双指针应用代码classSolution{publicbooleanisPalindrome(Strings){StringBuffersgood=newStringBuffer();......