C语言(七)---指针(二)

作者&投稿:可使 (若有异议请与网页底部的电邮联系)

区别:

相同点

不同点

注意

在解释指针数组和数组指针之前先来解释下 数组的存储结构

那么它的存储结构如下图:

a[0]是a[ 0 ] [ 0 ]的地址 ,也是a数组的首地址

同理, a[1]是a[ 1 ] [ 0 ]的地址 ,a[2]是a[ 2 ] [ 0 ]的地址

任何数据都有地址,一级指针的值虽然是地址,但是这个地址做为一个数据也需要空间来存放,而二级指针就是就是来存储这个地址的。

打印结果:

二级指针可以直接访问二维数组吗?答案当然是不行的,那么如何访问二维数组呢?

通过指针数组间接访问数组

例如 malloc() 函数 ,或者自定义的函数如:

所谓的指针函数也没什么特别的,和普通函数相比就是指针函数返回一个指针

根据传参类型分类

一维数组:int arr[3];

二维数组:int arr[3] [3];

指针数组:int*p[3];

函数名:

可以思考下为什么要把一个函数的地址作为参数传递给另一个函数,要知道在C语言中,一个函数内部是可以直接调用其他函数的,既然可以直接调用,为什么还要用这么麻烦的办法去把函数当做参数来传递呢。

下面我举个例子:

我们设计一个函数fun()来计算某个精确值,不同的人计算的精确值不一样,但是我们都调用fun()函数,起了冲突,重名了,怎么办?重写吗,也可以,但是我们还有其他办法,只需要把 各自的计算精确值的算法写成一个函数,再通过参数传递给fun().



~

C语言关于指针与二位数组的问题
答:此二维数组由两个一位数组组成。a[2][3]:a[0] 1 3 5 a[1] 7 9 11 a[0][0] = 1 a[0][1] = 3 a[1][2] = 5 a[1][0] = 7 a[1][1] = 9 a[1][2] = 11 (a) = (*a) = (&a) 解释,a为二维数组名,指向一位数组a[0],即0行...

c语言中,指针能二次赋值咩
答:能 指针变量只是存放指向存储数据的空间的地址, 它本身并不存放实际的数据 指针就像是一本书的目录, 如第五章在38页, 它只是指引你到哪里去找到第5章, 并不管第5章里面到底写的什么内容, 如果编写目录的时候错了,或者前面又加了章节, 目录就要改变, 第五章在49页, 相当于给指针赋了新值....

C语言 关于POINTER(指针)的问题, 急!!!
答:C语言 关于POINTER(指针)的问题, 急!!! 谁能帮我详细地讲解一下什么是POINTER?作用是什么?在程序当中...printf( "%c", *(str+2) ); /* 也可写 printf(“%c”,str[2] ); */ printf( "%c",

计算机二级C语言,指针问题(问题见下,请给出详细解释,谢谢!)
答:答案是C。首先,p为指针,指向一个整形变量,它的值应该为一个地址,如果给该指针赋值,则可能出现内存访问出错的问题,因此A和D选项错误;p是指针的指针,因此可以认为*p为一个指针,同样道理,也不能给*p赋值,也可能出错;而C选项正确是因为,q为指针的指针,可以指向一个地址,因此,可以将指针p...

c语言 指针问题,求详细解,求过程
答:那接下来看while循环,首先明确告诉,循环了三次。第一次:p1指向“ABCDEFG"的第一位,p2指向最后一位,这因该没问题吧,接下来,显然满足p1<p2;进入循环按照上面所说理解 s=*p1++;*p1=*p2--;(s=A;p1指向第二 位,p2指向第6位);实现将第二位的B换为第七位的G,第六位的F换为A(...

C语言中 指针做函数参数传递二维数组
答:include <stdio.h> void fun(int (*p1)[3],int (*p2)[3]);int main(){ int p1[3][3]={{7,8,9},{4,5,6},{1,2,3}} ;int p2[3][3] = {0};int i = 0, j = 0;fun(p1,p2);for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ printf("%d ",*(*(...

C语言怎么用指针代替二维数组
答:1.设p是指向二维数组a[m][n]的指针变量,则有:int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。2.如果定义int (*p1)[n];p1=a;p1++后,p1指向a[1][0];则p+j将指向a[0]数组中的元素a[0][j]。由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则...

C语言指针运算问题(问题一)*p++和(*p)++(问题二)a[i][j]=*(a[i]+j...
答:p++ 等同于 (p++)先执行p++ 表达式,然后用p++ 表达式的值来参与 表达式运算。那么p++表达式的值是什么?对了,是自加之前的p的值,这个值的类型是什么?是跟p相同类型的指针,所以对这个值进行取值操作,取出的是p自加之前的指针指向的内容。第二个问题更简单了。a[i][j]是二维数组,相当于a...

C语言指针**p是什么意思
答:p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值!例如:int i=10; //定义了一个整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级指针指向p指针...

C语言指针指向一维数组与二维数组?
答:3和2是一样的,也是会报错的。可以使用行指针double (*p)[3]=data;指向数组第0行,也就是我们平常理解的第一行。访问方式,假设data是i行j列,*(*(p+i)+j)就是第i行j列的元素值,也就是data[i][j]的值。也可以使用列指针double *p = data[0]指向第0行0列,访问方式如下:...