数组指针与二维数组的关系(C语言指针数组与二维数组行指针小问题)
本文目录
- C语言指针数组与二维数组行指针小问题
- 谁能把你们开始理解指针和2维数组关系的方法教我啊!我头晕了哦
- C语言:简述一下“数组和指针的关系”
- 关于二维数组和指针
- C语言中关于二维数组与指针的关系
- 数组指针的指向一维数组和二维数组的区别
- 二维指针和二维数组的区别
C语言指针数组与二维数组行指针小问题
指针数组:该数组中存放的全部都是指针,例如:原例子中的char*name,这个是一个标准透了的一维数组,就像是数组inta;a=2;a=3;不同的是数组name存放的是指针,数组a存放的是数字name=name表示的是把name的指针赋值给name就不难理解了。二维数组的行名:LZ假设的数组charname是一个二维数组,行名name表示的是一个指向字符串的指针没问题吧,这个指针中存放的是一个字符串,或者说是一个字符数组,如果说上例子要改为二维数组的形式,那么需要进行strcpy的字符串拷贝。总结:总的来说:指针数组中的name表示的是一个变量,这个变量中存放的是指针,二维数组的name表示的是一个指针,指向字符串的指针。如果LZ还不明白变量和指针的区别,我也没办法解释了。
谁能把你们开始理解指针和2维数组关系的方法教我啊!我头晕了哦
其实 不难理解指针也是变量像你用 int a; char b;分别整型 和 字符 型的变量 定义了 这些 变量, 在程序 运行的 时候,他们会被分配内存空间,当然也就有了首地址吧!可能你要问了,什么是首地址呢比如,在Tc里边 int 占两个字节,低字节的地址(也就是内存的编号)就是这个int型变量 的 首地址。指针变量也是变量,但它的内容 存放的是 变量的地址。至于二维数组,首先要说数组名,数组名是数组的首地址,二维数组的数组名 是个 行指针,指向的是 第0行的地址,如果想 用指针访问 某个二维数组的元素,就得先把它转成 元素指针,在通过*运算符,读出它的值。一定要记住a与*(a+i)是无条件等价的!比如int a;//你随便初始化a是二维数组的首地址,a指向第0行你可以通过以下几种方式得到a的值,估计看完后,你就懂了。a//直接引用刚才说过,a是行指针,不能直接通过它,得到数组元素,方法如下:*(*(a+2)+2)//解释:从内到外,a+2指向第二行,*(a+2)是元素指针,指向第二行第0个元素, 等价于a*(a+2)+2指向 第二行第2个元素 等价于a+2*(*(a+2)+2)取 第二行第2个元素 的值 等价于a是不是通过指针 也一样 得到了一样的结果。指针是C语言的灵魂所在,一定要弄明白!有问题 QQ:270495267
C语言:简述一下“数组和指针的关系”
一、概念
数组:数组是用于储存多个相同类型数据的集合。
指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。
数组:数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的,多维数组在内存中是按照一维数组存储的,只是在逻辑上是多维的。
指针:指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存。
数组:
指针:
- void test(const char* str)
- {printf(“%s\n“, str);
- }int main()
- {//函数指针pfunvoid (*pfun)(const char*) = test;//函数指针的数组pfunArrvoid (*pfunArr)(const char* str);
- pfunArr = test;//指向函数指针数组pfunArr的指针ppfunArrvoid (*(*ppfunArr))(const char*) = &pfunArr;return 0;
- }
二、赋值、存储方式、求sizeof、初始化等
1.赋值
同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝
2.存储方式
数组的存储空间,不是在静态区就是在栈上。
指针:由于指针本身就是一个变量,再加上它所存放的也是变量,所以指针的存储空间不能确定。
3.求sizeof
数组所占存储空间的内存:sizeof(数组名)数组的大小:sizeof(数组名)/sizeof(数据类型)
在32位平台下,无论指针的类型是什么,sizeof(指针名)都是4,在64位平台下,无论指针的类型是什么,sizeof(指针名)都是8。
关于指针和数组求sizeof,我在之前的博客中写过,现将连接贴上:
2.函数指针数组
形式:例如int (*p)( );因为p先和结合,说明p是数组,数组的内容是一个int (*)( )类型的指针函数指针数组在转换表中应用广泛
3.函数指针数组的指针
指向函数指针数组的一个指针,也就是说,指针指向一个数组,数组的元素都是函数指针
关于二维数组和指针
char *p=str应该改成char *p=*str;二维数组的数组名就是一个地址,而且是一个二级指针,*str这样就变成一级指针了,就可以赋给同类型的p了;由于p是一个指向字符类型的指针,所以p+10就相当于p+10*sizeof(char)要不改成这样:char (*p)=str;这样p的类型为int (*);即指向由10个字符组成的一维组;p+10就指向第10维了
C语言中关于二维数组与指针的关系
修改后代码如下。。。我测试过了。。。。希望对你有帮助。。。。。#include《stdio.h》# include《stdio.h》void main(){ int a,i,j,k=0,m,n; int (*p)=a; printf(“enter n(n《10)“); scanf(“%d“,&n); if(n%2==0) m=n/2; else m=n/2+1; for(i=0;i《m;i++) { for(j=i;j《n-i;j++) *(*(p+i)+j)=++k; for(j=i+1;j《n-i;j++) *(*(p+j)+(n-i-1))=++k; for(j=n-i-2;j》=i;j--) *(*(p+n-i-1)+j)=++k; for(j=n-i-2;j》=i+1;j--) *(*(p+j)+i)=++k; } for(i=0;i《n;i++) { for(j=0;j《n;j++) printf(“%5d“,*(*(p+i)+j)); printf(“\n“); }}
数组指针的指向一维数组和二维数组的区别
一、指向一维数组的指针变量设一维数组为a+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(*(a+i)+j)。
二维指针和二维数组的区别
指针的指针和二维数组完全俩东西,二维数组是 一维数组的一维数组,元素是数组,所以可以隐式转化为int (*),跟int **两回事,扩展到更多维或其它类型也是成立的,只能隐式转化为第一维的元素的指针 补充说明下隐式转化为指针
更多文章:
哪几款CRM系统免费又好使用的呢?有哪些免费的轻量级在线CRM系统
2024年5月6日 04:29
疾风剑豪bug(LOL中,看到有网友录制亚索新BUG无CD连Q,我对线时却哭了,具体怎么操作)
2024年7月23日 23:21
solidworks2012安装方法(如何安装solidworks201264位)
2024年5月5日 15:35
台式电脑没有无线网卡怎么连wifi(台式电脑没有无线网卡能用无线网吗)
2024年7月2日 10:40
autodesksmoke(视频剪切,特效,合并,转换,哪个软件好用、易学)
2024年7月2日 23:57
起点中文网手机版(起点中文网手机版为什么显示有这么多评论但是点进去却只有那两条如何看到全部的评论)
2024年7月2日 12:01
粉末游戏鸟玩家有什么用?App Store里面有什么好玩的体育类手机游戏
2024年5月10日 01:22