一、指针的指针
指针的指针,即指针的地址
定义了一个指针变量,指针变量本身占4个字节,指针变量也有地址编号
例:
int a=0x12345678;
假设a的地址为:0x0000 2000
int *p;
p=&a;
则p中存放的是a的地址编号为0x0000 2000
因为p也占4个字节,有自己的地址编号,即指针变量的地址,即指针的指针
假设p的地址编号为0x0000 3000,这个地址是指针p的地址
定义一个变量去存放p的地址编号,这个变量就是指针的指针
int **q;
q=&p;//q就保存了p的地址,也可以说q指向了p
则q里存放的就是0x00003000
p和q都是指针变量,都占4个字节,都是存放地址编号,只是类型不一样
#include<stdio.h>
void main()
{
int a=0x12345678;
int *p;
int **q;
int ***m;
p=&a;
printf("&a=%p\n",&a);
printf("p=%p\n",p);
q=&p;
printf("&p=%p\n",&p);
printf("q=%p\n",q);
m=&q;
printf("&q=%p\n",&q);
printf("m=%p\n",m);
printf("*p=%#x\n",*p);
printf("**q=%#x\n",**q);
printf("***m=%#x\n",***m);
}
/*
&a=0xbf9bde30
p=0xbf9bde30
&p=0xbf9bde34
q=0xbf9bde34
&q=0xbf9bde38
m=0xbf9bde38
*p=0x12345678
**q=0x12345678
***m=0x12345678
*/
二、字符串和指针
字符串的概念:
字符串就是’\0’结尾的若干的字符的集合:”hello”
字符串的地址:是第一个字符的地址,字符串”hello”的地址,其实就是字符串中’h’的地址,即我们可以定义一个变量保存字符串的地址:char *s=”hello”;
字符串的存储形式:数组、文字常量区、堆
1.字符串存在数组中
其实就是在内存(栈、静态全局区)中开辟了一段空间存放字符串。
char str[100]=”hello”;
定义了一个字符数组str,用来存放多个字符,并且用hello给str数组初始化,字符串”hello”,存放在str中
注意:普通全局数组,内存分配在静态全局区
普通局部数组,内存分配在栈区
静态数组(静态全局数组、静态局部数组),内存分配在静态全局区
2.字符串存放在文字常量区
在文字常量区开辟了一段空间存放字符串,将字符串的首地址赋给指针变量
char *str=”helloworld”;
定义了一个字符指针变量str,只能存放字符地址编号,
“helloworld”这个字符串中的字符不是存放在str指针变量中
str只是存放了字符’h’的地址编号,“helloworld”存放在字符常量区
3.字符串存放在堆区
使用malloc等函数在堆区申请空间,将字符串拷贝到堆区
char *str=(char *)malloc(100*sizeof(char));//动态申请了100个字节的存储空间
首地址给str赋值
strcpy(str,”helloworld”);//将字符串”helloworl
今天的文章指针与字符数组_数组指针和指针数组[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68872.html