‘壹’ c语言数组指针的输出问题,问题在代码注释中
明显出问题了。++和--后置的问题,其塌戚实你代码写错了,循环终止条件应该是i<sizeof(a)/4;
所以你的代码应氏衫型该"走"字在第一个循环中打印不出来的;如果你用i<sizeof(a)/4,那么指针越界指向了;原因就是你歼猜++后置了,打印出最后一个"走"后还是执行++;
就是这个原因造成了第二个循环第一趟循环灰乱码!
‘贰’ C语言 指针 数组 定义
指针在定森亩差义的时候,前面的*表示其类型为指针,而不是用于取此皮内容。
定义的同时赋值,uchar *p=Number; 这样是可以的耐陪。
下面这样才是错误的:
uchar *p;
*p=Number;
‘叁’ C语言中关于指向数组的指针
char str[100];
char *pi=str; //相当于char *pi ;pi=str;
char **ppi=*pi;//这个地方抄错了。应为char **ppi=&pi;
定义加*表明这是指针类型的变量
用的时候,就是用的指针,加*干什么。
只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,
才会又加*号,表示获取或改变,指针所指变量的值。
char x=10;
*pi =x; //给指针所指的变量赋值,改变指针所指变量的值(改变*pi) 。
x=*pi; //取指针所指的值,取指针pi所指的变量的值(表示为*pi)赋值给x。
‘肆’ 请问C语言的指针数组到底是什么可以简单易懂地详细解释一下吗最好有例子
一个数组,它的每一个元素都是一个指针。
如果每个指针指向一个字符串猜帆枣首地址,就可以指向很多字符串。
如果每个指针指向一个函数的入口地址,就威力穗拆无轿配比。
‘伍’ C语言中的指向数组的指针怎么理解
指针的工作是通过数组在内存的地址来实现的。指向数组的指针。。。有几种表示的比扰没如p=&a;a是数组名慧漏,p是指缓碧纳针;像上面的是表示p是指向a数组首地址的一个指针
‘陆’ C语言中的指针数组是什么意思我对这个概念很混乱,指针数组的定义,作用,使用。
指针数组:就是存储指针的数组。
数组指针:就是指向数组的指针。
指针:本质就是一个int型变量,含义:一个内存地址。
举例:
int *p[10] 指针数组。原因:因为[的优先级比*高,p先和[结合,所以是指针数组。等同于
int* p[10].
int (*p)[10] 声明了一个指针P,指向有10个元素的数组。
如果 int* p;就是声明了一个指向int变量的指针P。同理。int (*p)[10] 声明一个指向int[10]的数组。
‘柒’ C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’。
指针数组定义int*p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,
这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样*p=a;这里*p表示指针数组第一个元素的值,a的首地址的值。
数组指针定义int(*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int(*p)[4];//该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;//将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;//该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
(7)C语言指针数组注释扩展阅读:
与数组指针关系
数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组是数组元素为指针的数组,其本质为数组。
例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针,[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量
与二维数组对比
二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。
指针数组:如char*str_B[5]系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。
如果我做这样的定义:
char a[3][8]={"gain","much","strong"};
char*n[3]={"gain","much","strong"};
他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了
3×8的空间,而给n分配的空间则取决于具体字符串的长度。
此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。
由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。
举例编辑
数组指针:
#include<stdio.h>
int main()
{
char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一个汉字=3个字节
char(*p)[4];
int i;p=c;//将指针定位于c[0]
for(i=0;i<=5;i++)
{
printf("%s,",*(p+i));//或者将*(p+i)替换成*p++
}
printf(" ");
for(i=5;i>=0;i--)
{
printf("%s,",*(p+i));//或者将*(p+i)替换成*--p
}
return 0;
}
指针数组:
#include<stdio.h>
int main()
{
int i;
char*pch[6]={"妹","妹","你","坐","船","头"};
for(i=0;i<6;i++){
printf("%s,",pch<i>);
}
printf(" ");
for(i=5;i>=0;i--){
printf("%s ",pch<i>);
}
return 0;
}
‘捌’ c语言中数组指针的表示方法
(*k)[3]意为指向包含三个整形元素的一位数组;
*k[3]意为一个数组,数组的每个元素都是一个指针
以下为实例:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int (*p)[3];
int a[2][3]={1,2,3,4,5,6};
p=a;
//假设我们想输出第二行,第三个
printf("%d",*(*(p+1)+2));
getch();
}
#include <stdio.h>
#include <conio.h>
void main(void)
{
int *p[3];
int a=0,b=1,c=2;
p[0]=&a;
p[1]=&b;
p[2]=&c;
printf("%d,%d,%d",*p[0],*p[1],*p[2]);
//输出结果为 0,1,2
}
不懂再问
‘玖’ c语言多维数组指针求解 希望高手每行注释一下 谢谢
#include
"stdio.h"
void
main()
{
int
a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
//
定义一个3行4列的二维数组
printf("%d,",a);
//
输出数组a
的首地址
printf("%d,",*a);
//
同上
printf("%d,",a[0]);
//
把a[0]看成一个数组名,则a[3][4]就相当于一维数组了,所以也是首地址
printf("%d,",&a[0]);
//同上
printf("%d\n",&a[0][0]);
//
a[0][0]是值,所以&a[0][0]也是取首地址
printf("%d,",a+1);
//
第一行的首地址
printf("%d,",*(a+1));
//
同上(理由跟输出a[0]差不多)
printf("%d,",a[1]);
//
同上
printf("%d,",&a[1]);
//
同上
printf("%d\n",&a[1][0]);
//
同上
printf("%d,",a+2);
//
这些都跟a+1以下的一样的原理
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}
‘拾’ C语言 指针与数组的详解及区别
数组名是数组的常量指针,区别就是常梁逗量与变量,数组名是不可以修改(只能是本数组的地址)的,而指针则可以重新赋值(橡毁卖指向的新的余备变量)。