首页 > 其他分享 >指针详解

指针详解

时间:2023-06-23 18:32:25浏览次数:29  
标签:p2 arr int char 详解 printf 指针

一、指针运算

给一个指针变量+1,通常情况下不是给指针本身+1,而是”迈一步“,步长根据指针的类型来确定。

int main() {
	char a = 1;
	int b = 1;
	int arr[10] = { 0 };

	char* pa = &a;
	int* pb = &b;
	int(*parr)[10] = &arr;

	printf("%p\n", pa );
	printf("%p\n", pa + 1); //相差1
	printf("%p\n", pb);
	printf("%p\n", pb + 1); //相差4
	printf("%p\n", parr);
	printf("%p\n", parr + 1); //相差40
	return 0;
}

指针详解_字符指针

二、字符指针(char*)

char*用于存储char型变量的地址

1.通过字符指针创建常量字符串

以下是三种打印字符串的方式

int main() {
	//第一种
	char arr[] = "hello world";
	printf("%s\n", arr); //arr末尾隐藏\0,打印时读取到\0结束
  
	//第二种
	char* p1 = arr;
	printf("%s\n", p1);
  
	//第三种
	char* p2 = "hello world";
	printf("%s\n", p2);
	return 0;
}

其中第一二种为常规方式,重点分析第三种 ‘char* p2 = "hello world" ’,看似是把char型数组直接赋值给p2指针,实则不然,

因为char型指针最多存放4个字节,而hello world\0有12个字节。p2实际上是存储了首元素地址。

用第三种方式创建的字符串为常量字符串,无法被修改,最好用const加以修饰

int main() {
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	char* p1 = "abcdef";
	char* p2 = "abcdef"; //如果两个常量字符串完全相同,则其不会在内存中反复创建,只会创建一个,并且拥有唯一的地址

	if (arr1 == arr2)  //首元素地址不相同
		printf("相等\n");
	else
		printf("不相等\n");

	if (p1 == p2)  //首元素地址相同
		printf("相等\n");
	else
		printf("不相等\n");
	return 0;  //结果为不相等 相等
}


标签:p2,arr,int,char,详解,printf,指针
From: https://blog.51cto.com/u_16102535/6538577

相关文章

  • DVWA靶场之文件上传通关详解
    原理文件上传漏洞是应用程序在处理用户上传的文件时没有对文件进行合理的检查和过滤,而恶意文件由攻击者伪造成合法文件,从而骗过应用程序进行上传和执行恶意代码。存在原因开发人员没有对用户上传的文件进行充分的验证和过滤。攻击者可以通过构造恶意文件,利用上传漏洞将其上传到......
  • JVM内存模型及CMS、G1和ZGC垃圾回收器详解
    1.JVM内存模型JVM内存模型主要指运行时的数据区,包括5个部分,如下图所示。栈也叫方法栈,是线程私有的,线程在执行每个方法时都会同时创建一个栈帧,用来存储局部变量表、操作栈、动态链接、方法出口等信息。调用方法时执行入栈,方法返回时执行出栈。本地方法栈与栈类似,也是用来......
  • ArrayList和LinkedList的区别详解
    感谢巨人的肩膀,原作者:https://blog.csdn.net/qing_gee/article/details/108841587/ArrayList和LinkedList有什么区别,是面试官非常喜欢问的一个问题。可能大部分小伙伴和我一样,能回答出“ArrayList是基于数组实现的,LinkedList是基于双向链表实现的。”关于这一点,我之前的......
  • Java四大引用详解:强引用、软引用、弱引用、虚引用
    原文链接:https://blog.csdn.net/ChenRui_yz/article/details/126315260Java引用从JDK1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期,这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。强引用强引用是最普遍的引用,一般把一个对象赋......
  • DVWA靶场之CSRF通关详解
    原理CSRF漏洞是指利用受害者尚未失效的身份认证信息(cookie、会话等信息),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下,以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密、信息修改等操作)。形成原因CSRF的形成原因主要是由于Web应用程序没有......
  • DVWA靶场之XSS通关详解
    原理XSS漏洞是攻击者将恶意代码注入到合法网页中,当用户浏览该页面时,恶意代码会被执行,从而获取用户敏感信息或进行其他攻击。形成原因网站对用户输入数据的过滤不严格或不完备,攻击者可以根据这个漏洞向网站提交恶意代码,然后再将这些代码传播给其他用户,从而造成危害。防御措施......
  • const 与 指针
    const与指针指向const对象的指针指向const对象的指针,不能够修改指针指向对象的值;但是可以修改指针的指向。举个例子:就是不能更换房间内的物品,但是可以更换房间。我们都知道,指针的值是空间中的一个地址:也就是说不能修改地址指向对象的值;但是可以给指针一个新的地址。#i......
  • IntStream的用法详解
    IntStream是一种特殊的Stream,用来提供对int类型数据进行相关的stream操作,下面我们一起来看下。1生成IntStream1.1IntStream.generate用来生成无限个数整数对应的stream,对于需要持续获取随机值的场景可以考虑使用这种方式。publicvoidtestGenerate(){Randomrand......
  • const修饰指针
    intmain(){inta=10;intb=10;//const修饰的是指针所以指针指向可以修改但指针的值不可以更改constint*p1=&a;p1=&b;//*p1=100;//const修饰的是常量指针指向不可以更改指针指向的值可以修改int*constp2=&a;//p2=&b;*p2=100;constint*con......
  • @interface 注解详解
    @interface用来定义一个自定义注解在Java中,定义注解其实和定义接口差多不,只需要在interface前添加一个@符号就可以,即@interfaceZhujie{},这就表明我们定义了一个名为@Zhujie的注解。注解中的方法即为注解的元素,元素中不能包含参数,返回值只能为简单数据类型、String、Clas......