您当前的位置:首页 > 好词好句 > 正文

什么是指针数组?指针数组怎么使用

本文目录

  • 什么是指针数组
  • 指针数组怎么使用
  • C语言中:数组指针与指针数组有什么区别
  • 指针数组是什么怎么可以这样定义
  • 什么是数组指针
  • C语言中指针数组是什么意思
  • 指针与数组的关系是什么啊
  • C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’
  • 指针数组

什么是指针数组

同志们他说的是指针数组不是数组指针。 指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下: char *a={“tan“,“li“,“cheng“,“fang“,“zheng“}; 定义指针数组a,存放姓名,a有5个成员,即a是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说 a=字符’t’的地址 a=字符’l’的地址 a=字符’c’的地址 a=字符’f’的地址 a=字符’z’的地址 为何要这样?因为各个名字是字符串不是单个字符,也就是说它相当于二维数组 tan li cheng fang zheng 也就是相当于有行有列,所以要找到数组中的某一个字符就要先找到所在的行即a[i],这里a[i]就是个指针指向每行的第一个字符的地址,*(a[i]+j)就是第i+1行第j+1个元素。也就是说 char *a={“tan“,“li“,“cheng“,“fang“,“zheng“}; 等价于定义 char a={“tan“,“li“,“cheng“,“fang“,“zheng“}; 只是对于字符串,函数strncpy,strcpy,strcmp,strlen,strcat,strstr,strchr的参数都是指针变量都是一个指向字符串首字符的地址的指针,故用指针数组表示一个二维数组更方便形象,有些数据结构复杂,用指针数组来指向它们,当要改变数据的顺序时只要改变指向它们的指针的顺序不必改变数据本身,这样可以简化问题。指针是个好东西,是c语言的精华。你只要好好看《谭浩强的c程序设计》就会完全明白。

指针数组怎么使用

在C语言和C++等语言中,数组元素全为同一类指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。

C语言中:数组指针与指针数组有什么区别

数组指针是指向这个数组首地址的指针,指向对象是这个数组;指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;例子:int a;int* s;s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;int a;int* s;for(int i=0;i《5;i++)s[i]=a;//这里s就是一个指针数组,它的每个元素都是整型变量a的地址应该算比较明白了吧谢楼上提醒

指针数组是什么怎么可以这样定义

很简单,指针 数组你可以这么理解,你从右往左看~week是不是一个数组~再往前看,是不是一个char *。那么值钱普通的函数(举个例子)int num是不是整型数组~那么char *自然而然也就是一个数组里面都是char *。其实你可以理解为这个是一个指针退化为数组,变成的一个二维数组~

什么是数组指针

数组指针就是指向一个数组的指针。数组中每一个元素在内存中都占有一个内存单元。当你要找到数组中某一个元素的时候,只须要找到该数组的首元素地址。例如指针p指向数组a的首元素a,则a的地址为p+9

C语言中指针数组是什么意思

指针数组就是指针的数组举个例子吧:int *p;这个就是指针数组数组一共有两个元素,即为2个指针就相当于int *p1;int *p2;-------------做个类比int a;这个是一个整型数组相当于int a;int b;一个意思

指针与数组的关系是什么啊

1、指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。

2、数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。

数组和指针的唯一区别是,不能改变数组名称指向的地址。

对于数组来说,数组的首地址,也可以用指针来表示操作,如:

int a;

int *p,n;

p = a;

对第一个元素取值,可以用几种方法:

n =a;

n = *p;

n = p;

n = *(p+0) ;

但是以下语句则是非法的:

readings = totals; // 非法!不能改变 readings totals = dptr; // 非法!不能改变 totals

数组名称是指针常量。不能让它们指向除了它们所代表的数组之外的任何东西。

扩展资料

下面的程序定义了一个 double 数组和一个 double 指针,该指针分配了数组的起始地址。随后,不仅指针符号可以与数组名称一起使用,而且下标符号也可以与指针一起使用。

int main()

{

const int NUM_COINS = 5;

double coins[NUM_COINS] = {0.05, 0.1, 0.25, 0.5, 1.0};

double *doublePtr; // Pointer to a double

// Assign the address of the coins array to doublePtr

doublePtr = coins;

// Display the contents of the coins array

// Use subscripts with the pointer!

cout 《《 setprecision (2);

cout 《《 “Here are the values in the coins array:\n“;

for (int count = 0; count 《 NUM_COINS; count++)

cout 《《 doublePtr [count] 《《 “ “;

// Display the contents of the coins array again, but this time use pointer notation with the array name!

cout 《《 “\nAnd here they are again:\n“;

for (int count = 0; count 《 NUM_COINS; count++)

cout 《《 *(coins + count) 《《 “ “;

cout 《《 endl;

return 0;

}

程序输出结果:

Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1

当一个数组的地址分配给一个指针时,就不需要地址运算符了。由于数组的名称已经是一个地址,所以使用 & 运算符是不正确的。但是,可以使用地址运算符来获取数组中单个元素的地址。

C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’

指针数组定义int*p[n];

优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,

这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p、p、p...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样*p=a;这里*p表示指针数组第一个元素的值,a的首地址的值。

数组指针定义int(*p)[n];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:

int a;

int(*p);//该语句是定义一个数组指针,指向含4个元素的一维数组。

p=a;//将该二维数组的首地址赋给p,也就是a或&a

p++;//该语句执行过后,也就是p=p+1;p跨过行a指向了行a

扩展资料:

与数组指针关系

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组是数组元素为指针的数组,其本质为数组。

例如:*p是指针数组,实质是一个数组,里面的两个元素都是指针,的优先级比*的优先级高,p先与结合,形成数组p,有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量

与二维数组对比

二维数组:如char string_1只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。

指针数组:如char*str_B系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。

如果我做这样的定义:

char a={“gain“,“much“,“strong“};

char*n={“gain“,“much“,“strong“};

他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了

3×8的空间,而给n分配的空间则取决于具体字符串的长度。

此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。

由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。

举例编辑

数组指针:

#include《stdio.h》

int main()

{

char c={“哥“,“哥“,“我“,“岸“,“上“,“走“};//UTF-8:一个汉字=3个字节

char(*p);

int i;p=c;//将指针定位于c

for(i=0;i《=5;i++)

{

printf(“%s,“,*(p+i));//或者将*(p+i)替换成*p++

}

printf(“\n“);

for(i=5;i》=0;i--)

{

printf(“%s,“,*(p+i));//或者将*(p+i)替换成*--p

}

return 0;

}

指针数组:

#include《stdio.h》

int main()

{

int i;

char*pch={“妹“,“妹“,“你“,“坐“,“船“,“头“};

for(i=0;i《6;i++){

printf(“%s,“,pch《i》);

}

printf(“\n“);

for(i=5;i》=0;i--){

printf(“%s\n“,pch《i》);

}

return 0;

}

参考资料:

百度百科——指针数组

指针数组

你要知道strcmp的真正含义才行哦,它的原型是char *strcmp(const char *s1, const char *s2),这个函数工作的原理就是比较两个指针所指向的字符串的大小,关于大小的具体比较不知道你是否清楚,就是按照字符串中从左到右字母的字典序比较的。 在你的例子中,strcmp (s[i],s[j])的含义就是比较指针s[i]和指针s[j]所指向的字符串的大小,而我们由char *s[ ]知道,s[i]和s[j]确实都是指针,所以可以放心的有strcmp函数比较大小了。 问题的关键你需要知道strcmp的原理以及清楚指针数组的概念,指针数组比如上例的s,它是一个数组,数组中的每个元素都是一个指针,关于strcmp的具体定义,你可以参看以下wowadown的回答 不知道你明白了没有*_*


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 家里的偷油婆怎么消灭(偷油婆怎么消灭)

下一篇: js炫酷特效(建站知识:如何使用JS来自由切换css样式表)



推荐阅读