数组指针 什么是指针数组
亲爱的读者们,你是否对数组指针和什么是指针数组的关系感到好奇?在本文中,我将深入探讨它们之间的联系,让你对此有更深刻的理解。
C语言指针数组的作用
指针数组:数组成员是指针的数组。
作用:数组的属性全有。因为成员是指针,这就可以延伸出很多内容。包括:
成员是函数指针,整个数组就是一类相关函数的集合,便于代码架构的管理。
成员是链表指针啦,char指针,这种就是能做出类似散列表的结构。
总体来讲,就是一组相关数据的指针的集合,达到的目的就是搜集指向相关数据的指针放到一个集合里面。
什么是指针数组
同志们他说的是指针数组不是数组指针。
指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下:
char*a[5]={"tan","li","cheng","fang","zheng"};
定义指针数组a,存放姓名,a有5个成员,即a[5]是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说
a[0]=字符't'的地址
a[1]=字符'l'的地址
a[2]=字符'c'的地址
a[3]=字符'f'的地址
a[4]=字符'z'的地址
为何要这样?因为各个名字是字符串不是单个字符,也就是说它相当于二维数组
tan
li
cheng
fang
zheng
也就是相当于有行有列,所以要找到数组中的某一个字符就要先找到所在的行即a[i],这里a[i]就是个指针指向每行的第一个字符的地址,*(a[i]+j)就是第i+1行第j+1个元素。也就是说
char*a[5]={"tan","li","cheng","fang","zheng"};
等价于定义
char a[5][6]={"tan","li","cheng","fang","zheng"};
只是对于字符串,函数strncpy,strcpy,strcmp,strlen,strcat,strstr,strchr的参数都是指针变量都是一个指向字符串首字符的地址的指针,故用指针数组表示一个二维数组更方便形象,有些数据结构复杂,用指针数组来指向它们,当要改变数据的顺序时只要改变指向它们的指针的顺序不必改变数据本身,这样可以简化问题。指针是个好东西,是c语言的精华。你只要好好看《谭浩强的c程序设计》就会完全明白。
C语言数组指针的具体用法
同意楼上!
不能定义*d[0],因为这个数组的大小为0!
可以这样来
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char*d[4];
d[0]=malloc(1*sizeof(char));
strcpy(d[0],"web");
printf("%s",d[0]);
return 0;
}
此时*d[]为一个指向指针的指针
d[0]=malloc(1*sizeof(char));
此句话的意思是,分配1个字节的内存空间给d[0],也就意味着d这个数组的第一个元素[0]内保存的是一个1字节空间的地址,因为d[0]指向一个地址!
你可以这样理解
对于普通的数组(例如 char d[4];),在内存中是这样的
变量:内存地址:内容
d[0]:0x400000h:'w'
d[1]:0x400001h:'e'
d[2]:0x400002h:'b'
d[3]:0x400003h:'\0'
而在此处 char*d[4];*d[0]= malloc(1*sizeof(char));,是这样的'
d[0]:0x400000h:0x400100h
d[1]:0x400001h:0x400101h
d[2]:0x400002h:0x400102h
d[3]:0x400003h:0x400103h
而在内存0x400100h处
才保存着"web\0"
不好意思,我上面说错了,应该是
d[0]:0x400000h:0x400100h
d[1]:0x400001h:NULL
d[2]:0x400002h:NULL
d[3]:0x400003h:NULL
而在内存0x400100h处
0x400100h:'w'
0x400101h:'e'
0x400102h:'b'
0x400103h:'\0'
对应的,你的代码执行后,内存变量应该是这样的
d[0]:0x400000h:0x400100h
d[1]:0x400001h:0x400104h
d[2]:0x400002h:0x400108h
d[3]:0x400003h:NULL
在内存0x400100处:
0x400100h:'w'
0x400101h:'e'
0x400102h:'b'
0x400103h:'\0'
0x400104h:随机字符
......
0x400108h:随机字符
以上内存地址是以字节方式内存对齐的,用一些编译器编译后可能地址会有些问题(比如d[0]到d[1]不止差了4,可能是8),但总体框架就是这样!
c语言中,指针数组和行指针的区别是什么
int(*p)[4],这个就是行指针
这种类型的指针p是指向一个一维数组,这个一维数组包含4个整形元素
但是 int a[4];p=a;这种方式却是不对的
因为p只能指向一个整型的一维数组,不能指向一个整型数据,a所指向的正是a[0],是个整型数;
实际上int(*p)[4]这种类型的指针是用于多维数组中的,比如定义一个二维数组int b[3][4],就可以这样赋值p=&b[0],使p指向一维数组b[0],而且p的增减是以一维数组的长度为单位的,比如p+1指向的就是b[1]了
int*p[4]这个是指针数组了,首先弄明白这个是数组,里面存放的是指针也就是地址,这个地址所指向的是一个整型数据,你可以把p[0],p[1]....当作一个个的指针变量来使用
我学的时候也弄了半天才搞明白,这是我总结的,你多看看指针那关于多维数组与指针的一节,做些练习自己验证几次就容易弄明白了
文章分享结束,数组指针和什么是指针数组的答案你都知道了吗?欢迎再次光临本站哦!