1,C语言中 数组指针的意义数组的操作:起始地址加偏移来访问具体区域指针操作:当前地址直接寻址,地址操作可以实现++,--这样的操作,这种操作要比起始地址与偏移的加法更加节省时间(一般都有单周期指令与之配合),因此用指针访问数组中的数据要更加效率,适合处理像图像这样的大数据量对象 。首先要明白,指针数组中存储的是指针,也就是说两个元素都是指针 , 而且存放的也的确是“a”和“a”的地址 , 但要知道字符串和字符是两个不同的数据类型,也就是说虽然存放的地址是一样的,但指针的类型不能理解为是指向字符“a”和“a”的指针 , 应该是指向字符串“abcd”和“abcd”的,明白的么?【指针数组的好处,C语言中 数组指针的意义】
2,用指针输出字符串的原理是什么用指针数组处理字符串排序有何优点C语言中字符串的地址是按顺序存放的,用指针指向字符串的首地址,然后取出这个地址里面的值 , 然后指针加一,取出里面的值,这样就能输出整个字符串了 。用指针数组可以接收多个字符串,对这些字符串的操作可以做到相互隔离 , 一个指针数组的元素作为一个指针对应一个字符串 。指针指向栈内存地址 。计算机有大规模集成电路,计算速度快用地址存储数据,一个地址对应一个数据,利用地址调用数据 , 就像锁与钥匙的关系 。优点:可以帮你简化程序,节省内存,少输些代码 。。。。。。。。[100]; //10个指针赋初值,开辟空间 for(i=0;i<=9;i++) scanf("%我也不太熟啊 。。。但是你是输入几个字符串,所以p应该是一个二维数组 , ,Zjgkrd
3,C语言指针数组int main(int argc,char* argv[])也可以写成int main(int argc,charargv[][]),楼主知道为什么了吗?用二维数组存放一系列参数,这些参数由C命令行输入,每个参数的长度不一,所以用二维数组来存放这些字符串,当然用指针数组也可以,本质上是一样的同时要说明的是main它不过是一个函数,具体的函数原型是可以修改的第二个参数是指针数组,不是指向指针数组的指针 。那用指针数组的好处是什么呢? 如果我们要定义若干字符串但是每个字符串的长度不一定一样如果我们用数组来存储那么我们就应该以对大字符串的长度为基准这样会造成存储空间的浪费我们将采用指针数组每个指针的字节数是4乘以数组下标的最大值就是所要的空间char* argv[] 是用来存放字符串的用数组就变成存放的是字符串的一个一个的字符 , 而不是整个字符串main()也是一个函数,这个函数应用是与其他函数相同的,不同之处在于它是一个程序的入口 。您说的行参是由C语言内部指定的参数类型,不可更改数据类型的 。这个是一个固定的模式 , 必须是这样的
4,比较用指针数组处理多个字符串与用二维字符数组处理多个字符串的优指针数组内存利用率更高 , 字符窜长度不用相同,但是内存分配是动态的,速度比较慢;2维数组内存是在栈上分配的 , 速度较快,但占用空间较大 。用指针数组可以更方便,举个例子给你,假如你要到某栋单元房找一个叫李四的人,他住在A#408;如果你用的是二维数组的话,你应该是A[8][8],而用指针数组*A[8],你要找他,就要用到循环,for();如果是二维数组你要找多少回,你自己可以想象,而且当你找到A了,你是不是每次都还要回到A[k][0]来找408呢?如果是用指针数组的话,你只要找到了*A就找到了他的第一个地址变量,这时候你就可以直接去找408 , 而不用在回到A[k][0]去了,这里的k指的是A在数组里的下标,其实指针数组只是比二维数组处理数据起来方便,要是用不好就会让指针指错地方,我建议能用二维数组解决的尽量不要用指针数组 。最后建议你去看看清华大学出版社出版的谭浩强老师的c语言教程,那里有很详细的说明,也可以,看看数据结构 。回答的不好,希望见谅,希望能对你有所帮助二维字符数组一旦定义,那么每个字符串的最大长度、首地址都不能改变了 。字符指针数组,顾名思义,它是存放字符指针的数组 。由于它仅用来存放指针,所以它指向的每个字符串的首地址可以改变,字符串最大长度也可以改变 。相比而言,字符指针数组更灵活一些 。举例:二维字符数组:char str[5][5]=str[0]到str[4]五个字符串的最大长度被限制为(5-1)=4,注意处理字符串时不应溢出 。由于每个字符串的地址已经确定,所以以下赋值是不允许的(即便合法):str[0]="news";字符指针数组:char* str[5];以下赋值是允许的:str[0]="welcome!";//字符串长度无限定5,C语言指针数组的作用*a[5]是一个指针数组相当于一个二维数组 a[0]djijekflj a[1]ddiolqpq nv a[2]uioekljspoi a[3]iomspejfipel a[4]ioullapapwm 其中的a[i]指示的是地址,a[5]就是单纯的一维数组可以这么理解*a[5],里面的元素可以表示为a 、a+1 。。。*a[5]是一个指针数组相当于一个二维数组a[0]djijekflja[1]ddiolqpq nva[2]uioekljspoia[3]iomspejfipela[4]ioullapapwm其中的a[i]指示的是地址,a[5]就是单纯的一维数组在c语言中,当把数组名赋值给指针时,那么该指针指向数组的第一个元素,也就是该指针变量存放的是数组第一个元素的地址 。所以执行语句 int a[5]=p指向a[0],而上面for循环中p<a+5等价于p<=a+4表示只要指针指向的元素地址小于等于数组a中的a[4]的地址,就输出p指向的元素 。而p++表示使指针p指向a的下一个元素,所以结果自然是依次输出a[0],a[1],a[2],a[3],a[4]的值 , 即13579了int a[][] 与int(*a)[]等价的例如int a[2][3]二维数组int(*a)[]数组指针二维数组就不说了很好理解int(*a)[5] 这里a表示的意思就是 指向一个由5个整形数 组成的一维数组的指针char *a[]与**a是等价的char *a[]指针数组**a指向指针的指针例如可以这样用char *a[]=char **b;b=a;//这里的*b就相当于a[0]更详细内容请参考谭浩强写的C语言的第九章 指针以下程序在VS 2005调试通过,cout为C++语法,输出语句,同C的printf()例:#include#include using namespace std; int main() { int * a[5];//指针数组,这里数组有5个元素,每个元素都是一个指针 int b[5]={1,2,3,4,5};//普通数组,数组有5个元素,每个元素都是int型 a[0]=b;//把数组b的地址赋值给指针数组a的第一个元素(也就是a[0]) cout<<*a[0]<<*(a[0]+1)<<*(a[0]+2)<<*(a[0]+3)<<*(a[0]+4)< cout<<<} 如果还不懂,可以Hi我 。
推荐阅读
- 鸡蛋 吃鸡蛋有哪些禁忌?
- 如何在雷电模拟器中区分不同的服务器? 雷电模拟器怎么区分服务器
- 能力风暴,能力风暴vjcl仿真系统
- 电热水器电路分析,史密斯电热水器电路图纸
- blob分析,opencv blob分析
- 走步机,走步机是干什么用的
- 如何用DiskGenius屏蔽硬盘坏道?怎么用DiskGenius激活分区
- jj斗地主官网,JJ斗地主的官网到底是哪个急
- 告诉你外语学习的真实方法及误区分析