关键词:
废话不多少,直接上代码,关键的东西已经注释了,看注释信息理解即可。
说明:本程序讨论了一维数组和指针的关系,谈论了二维数组和指针之间的关系,讨论了字符串数组指针数组和指针之间的关系,代码中以给出定义的方法和简单的使用,但是有些使用方法并没有列出,如果需要,
请自行加入printf调试即可。
转贴请注明出处,欢迎和我讨论,谢谢。
----------cofin_add
#include <stdio.h>
void fun(int m, char *((*p)[m]))
{
int i = 0;
char ** buf = (char **)p;
for(i=0;i<m;i++)
{
printf("%s\t", *(buf+i));
}
printf("\n");
}
void fun1(int m, char **buf)
{
int i = 0;
for(i=0;i<m;i++)
{
printf("%s\t", *(buf+i));
}
printf("\n");
}
int main(void)
{
char *buf[] = {"aa", "bb", "cc", "dd", "ee", "ff"}; //指针数组,其中的每一个变量(指针),指向第一个字符串的首地址。
char **pa = buf; //如何指向数组中的元素呢,因为其中的每一个元素都是指针,所以应该用二重指针指向它。
char **px = &buf[0]; //数组名就是数组元素的首地址,可以看到和上面是一样的。
char *(*pb)[6] = &buf; //如何指向指针数组本身?因为数组其中共有六个变量(有6个指针或者指针变量(地址)),故应该用数组指针来指向它,
//但是由于其中的变量是指针,所以应该在加一个*,纯属个人猜测,如果这个成立的话,也可以解释上面的为什么是用二重指针了,因为buf和&buf[0]等价
//也就是说,其实&buf[0] 是地址的地址(因为buf[0]本身存储的就是地址),应该用二重指针指向。
//一维数组再研究
int a[5] = {0}; //定义数组,有5个int型的变量
int *p1 = a; //定义指针指向数组中的元素
int (*p2)[5] = &a; //若是要指向这个数组本身,则需要用数组指针指向它,注意要加括号,[]比*优先级高。
//二维数组的指针研究
int aa[2][5] = {0};
int (*p3)[5] = aa; //指向二维数组中的元素,二维数组中的元素就是一维数组,参考指向一维数组的方法即可
int (*p4)[5] = &aa[0]; //和上面一样,数组的名字就是数组的首元素的地址,其实是一个地址,也就是一维数组的数组地址。
int *p5 = &aa[0][0]; //指向二维数组首元素(一维)的首地址,用int *p,类型刚好匹配
int (*p6)[2][5] = &aa; //指向二维数组本身的指针。总结:把定义中的数组名字换成指针,加()即可。
char *p = buf[1]; //buf[0] => 里面存的指针数组中的是第一个元素的地址,也就是直接把一个地址给他初始化
printf("buf[1] = 0x%x.\n", buf[1]);
printf("sizeof(buf[1]) = %d.\n", sizeof(buf[1]));
printf("buf[1] = 0x%x.\n", buf[1]);
printf("sizeof(buf) = %d.\n", sizeof(buf));
fun(sizeof(buf)/sizeof(buf[0]), &buf); //这里传的是数组指针的地址,类型推倒:原来是一个指针数组,char *pt[x],如果是
//普通数组的话,char a[x],若指向该数组本身则应该写作 char (*p)[x] = &a; 根据这一点,类比到指针数组也就是 :char *(*p)[x] = &pt;
fun1(sizeof(buf)/sizeof(buf[0]), buf); //同理
return 0;
}
运行结果:
将二维指针数组中的字符串分配给一维指针数组
】将二维指针数组中的字符串分配给一维指针数组【英文标题】:Assigningastringfroma2-Dpointerarraytoa1-DPointerArray【发布时间】:2016-02-2022:29:02【问题描述】:目前,我只需要使用数组和指针来执行此操作(因此不需要结构或数据结构... 查看详情
详解c语言指针(代码片段)
文章目录1.字符指针2.指针数组3.数组指针3.1数组指针的定义3.2&数组名和数组名的区别3.3数组指针的使用4.数组参数,指针参数4.1一维数组传参4.2二维数组传参4.3一级指针传参4.4二级指针传参5.函数指针6.函数指针数组7.指向... 查看详情
多维数组与指针(代码片段)
用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素,但在概念和使用上,多维数组的指针比一维数组的指针要复杂一些。可以认为二维数组是数组的数组。例:定义:inta[3][4]=1,2,3,4,5,6,7,8,9,10,11... 查看详情
go语言学习--指针数组和数组指针
数组指针(也称行指针)定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,... 查看详情
二维数组和指针
二维数组和指针⑴用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体... 查看详情
一维数组和一级指针浅析
...,这个名字成为数组 其实我们可以把数组看成是一个字符串,就像是C++中的stri 查看详情
数组参数和指针参数
...方式传递参数2.当向函数传递数组时,将数组名看做常量指针传数组首元素地址3.二维数组参数同样存在退化的问题,二维数组可以看做是一维数组,二维数组中的每个元素是一维数组4.二维数组参数中第一维的参数可以省略5.C语... 查看详情
一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变訪问数组的方式
??打印数组中的每一个元素,打印每一个元素的地址:#include<stdio.h>#include<stdlib.h> voidmain(void){ inta[10]={1,2,3,4,5,6,7,8,9,10}; for(int*p=a;p<a+10;p++) //指针类型决 查看详情
c语言指针指向一维数组与二维数组?
请问高人,想定义一个指针指向一个一维/二维数组,(一)double*a;doubledata[3]=1,2,3;a=data;编译正确(二)double*a;doubledata[3][3]=1,2,3,4,5,6,7,8,9;a=data;编译出错:error#515:avalueoftype"double(*)[3]"cannotbeassignedtoanentityoftype"double*"... 查看详情
educoder编程练习题解(文件)
...嵌套函数 一维数组和二维数组 字符数组 指针一 指针二 结构体 文件文件编辑与调试 顺序结构 选择结构一 选择结构二 循环一 循环二 函数递归与嵌套函数 一... 查看详情
二维数组数组指针以及指针数组
1.二维数组定义 格式:数据类型数组名[行][列]; 示例:intbuff[3][5]; 第一个[3]表示二维数组buff中有3个一位数组 第二个[5]表示每个一维数组中有5个成员。 若二维数组定义时进行初始... 查看详情
二维数据和一维指针数组(代码片段)
1.二维数组名a的含义:定义一个二维数组a: inta[3][4]=1,3,5,7,9,11,13,15,17,19,21,23; a数组包含3个行元素,a[0],a[1],a[2]。 每个行元素a[i]又是一个一维数组,它包含4个元素。a==&a[0]a+i==&a[i]a[0]==& 查看详情
c语言篇+指针进阶练习+qsort模拟实现(回调函数思想)+指针和数组笔试题(代码片段)
...录前言冒泡排序了解qsortc语言库qsort的使用qsort模拟实现指针和数组笔试题解析一维数组字符数组二维数组总结:数组名的意义前言qsort(quicksort)根据你给的比较函数给一个数组快速排序,是通过指针移动实现排... 查看详情
碎碎念(代码片段)
目录1.typedef定义数组类型2.指针数组3.数组指针4.二维数组5.二维数组是线性存储的(用一维数组方式打印)6.一维(二维)数组与数组指针7.二维数组做函数参数8.sizeof测试一维数组、二维数组1.typedef定义数组类型有typedef是类型,没... 查看详情
数组指针和指针数组的区别
数组指针(也称行指针)定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,... 查看详情
指针中容易混淆的概念以及常见笔试题(代码片段)
C语言指针文章目录C语言指针1.字符串指针2.指针数组3.数组指针4.数组参数,指针参数5.函数指针-指向函数的指针6.函数指针数组7.库函数qsort的用法:qsort(void*p,intnum1,intnum2,int(*cmp)(counstvoid*e1,counstvoid*e2))8.指针和数组练习题1.字符串指... 查看详情
指针与二维数组
二维数组的本质:intmatrix[3][4];intmatrix[3][4]; ==>int[4]matrix[3]; 令type为int[4]; typeint[3];说明matrix是一个数组,有3个元素;每一个元素是int[4]类型的;实质上int[4]就是一个拥有4个int元素的一维数组。事实上,... 查看详情
深入理解c指针经典笔试题——指针和数组(代码片段)
...专栏:【C语言】进阶部分🔹本文概括:一些指针和数组笔试题的解析 。🔹本文作者:花香碟自来_ 🔹发布时间:2023.3.12目录一、指针和数组练习题1.一维数组2.字符数组3.二维数组二、指针笔试题1.... 查看详情