c语言指针与二维数组
1. c语言 指针与二维数组
这已经说得很明白了,记住就是了。p=a[i]就是取a[i][0]的地址,赋值给p。
2. C语言指针与二维数组
a是二维数组名,其字面值是该数组的起始地址,该地址同时也是一维数组a[0]的起始地址
所以a,*a,a[0],&a[0]的字面值都相同,a[0][0]就是首个元素
剩下的几行输出同理,无非就是行指针偏移的+1是以第二维的大小移动的而已
3. C语言指针及二维数组
一、p是存放float型数据的地址,而11是整型数据,当然不能做比较
二、因为pend也是地址
如:
p指向地址0x0012FF60 pend = p的话,pend也为0x0012FF60
pend = p+1,则p指向0x0012FF64 因为float占4个byte
pend=p+2 0x0012FF68
...
三 传入*a相当于传入&a[0][0]的地址,即二维数组a的地址
相当于
float* p = &a[0][0];
aver( p, 12 );
p是地址,*p则取到该地址里存地数据,即该程序的中的65
*(p+1)则会取到67 --二维数组是按行存储的
...
以此类推
p是个一级float型指针,所以**p显然不合逻辑,不合语法
4. C语言怎么用指针代替二维数组
设二维数组为typename
a[M][N],则指向该数组的指针为typename
(*p)[N]
=
a;这样就可以用p来代替二维数组了。
5. C语言中关于二维数组和指针的问题
*(p+1)单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址,也就是第 1 行第 0
个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针;就像一维数组的名字,在定义时或者和
sizeof、& 一起使用时才表示整个数组,出现在表达式中就会被转换为指向数组第 0 个元素的指针
6. c语言指向指针的指针,与二维数组
二维数组指针和指向指针的指针不是一回事
int
(*p)[3]
用于指向列数为3的二维数组
int
**p
不能用于二维数组
7. 如何在c语言二维数组中使用指针
程序中有些问题:
1、函数的定义有错误(参数格式不对);
2、程序中没有调用函数(或者说是调用格式有误)
3、函数中的处理逻辑需要修改(一步一步来,这样容易处理和理解)。
你定义的函数是使用数组作为参数的,数组名本身就是个地址(相当于指针)。
下面在手机上用易历知食软件里的微C程序设计来演示修正后的代码并运行程序,供参考。
手机上修正后的代码如下图:
手机上运行的效果如下图所示:
8. C语言如何定义指针指向字符型二维数组
使用指针变量访问二维数组的任意一个元素的方法:
1.使用列指针:定义一个列指针p,让它指向二维数组的第0个元素
int a[3][4];
int *p;
p=&a[0][0];
//因为a[0]是第0行的数组名,所以p=&a[0][0]相当于p=a[0],因为a[i][j]前面共有i*4+j个元素
该二维数组的任意i行j列元素可表示为*(p+i*4+j)。
2.使用行指针:定义一个行指针p,让它指向二维数组的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以为p=&a[0];
其中* ( *(p+i)+j)表示任意一个i行j列的元素。
(8)c语言指针与二维数组扩展阅读:
数组的使用规则:
1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
网络-数组