指针与字符数组_数组指针和指针数组[通俗易懂]

指针与字符数组_数组指针和指针数组[通俗易懂]指针的指针、字符串和指针、数组指针(详)_指针的指针

一、指针的指针

   指针的指针,即指针的地址

   定义了一个指针变量,指针变量本身占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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注