C语言 数组 输出 指针 求高手解答
作者&投稿:范琳 (若有异议请与网页底部的电邮联系)
(*p)[4]是数组指针,每一个指针指向含有4个整形的一维数组;p[1]对于前面的声明来说是指针,而p[1][1]是二维数组,所以不用再加上*取值,若要加上*,
代码中:printf("%4d",p[i][j]);
可以这样处理:printf("%4d",*(p[i]+j));
因为在执行了++p和p++之后,p已经指向了array[2]的位置了
变量在内存中的分布:
p=&a[0][0];和p=a[0];结果是一样的。
解释:p是指针,是一个地址:
p=&a[0][0]就是把a[0][0]的地址赋值给p,p就可以指向a[][]数组的首地址
for函数是通过p指针,来给p指向的地址赋值,实际就是给a[][]数组赋值
关于指针的访问方式有两种:
1是直接指针指向,比如int *p;
2是下标方式。
两种方法是通用的,这是一个基本规则。
p 是一个指向int指针,,而a是一个int数组,a[0][0]是个int 所以把其地址赋给p,及p指向数组a,
for中的意思是为数组a中元素赋值,,p 指向a 就意味着*p =a[0][0] p+1就是地址在a[0][0]的地址上加上一个int大小,就是a[0][1];因为数组申请的地址是连续的,,所以
for中只有一条语句 输出不是循环中的
答案是b
选B,p是指针,指向二维数组的首地址,此时可以认为指针是一个数组p[i]分别指向a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]...a[2][2]。在for循环中对p[i]赋值。
B
6
和菲嘉立: C语言的数组(不管多少维)在内存中都是线性储存的.所以用一级指针加偏移就可以访问所有元素.举个例子,有一个10*10的二维数组a,这样就可以输出:int a[10][10]; int *p = (int *)a; int i; for (i = 0; i < 10 * 10; i++) printf("%d", *(p + i));
北林区17225333618: c语言 用指针实现一组数据的数据输入与输出 - ?
和菲嘉立: #include<stdio.h> main() {int a[6],i,*p;for(i=0;i<6;i++) //括号() 数组元素下标0-5 表示六个元素scanf("%d",&a[i]); //加&,这里需要一个指针变量p=a;for(i=0;i<6;i++) //同上printf("%3d",*(p+i) ); //引用指针数据加*,想通过指针访问每个数组元素,需要变化指针地址printf("\n"); }
北林区17225333618: c语言一维数组逆序输出 指针,求指点!!! - ?
和菲嘉立: int i,temp,*p,T; //定义temp就行了,别定义*temp,不然按你后边的用法会错误的. T=(n/2)+1; for(p=a;p<a+T;p++) { temp=8p; //这里不是8P吧,应该是你输入*时候没有按shift*p=*(p+n-1); *(p+n-1)=temp; n--; }
北林区17225333618: 求C语言高手指点:请问如何指针定义二维数组?? 请用 **p ,(*P)[ ] ,*p[ ] 三种来进行指针定义 - ?
和菲嘉立: int a[4][5],*p[4],i; //p表示指针数组 for( i=0;i<4;i++ )p[i]=a[i]; /*有了这个定义后,指针数组p中的每一个指针分别指向了二维数组a每一行的首地址,以后通过p就可以访问a */ 访问格式:p[i][j] , (*(p+i))[j] , *(*(p+i)+j) , *(p[i]+j) 都表是a[i][j] eg: p[1][1]=1...
北林区17225333618: c语言数组指针?
和菲嘉立: *p=a //是指针p指向a数组的首地址,也就是数组的第一个元素; for在循环的时候指针p++ 不断的向后指向,所以结果就为 13579
北林区17225333618: c语言中将字符串用指针数组输入输出.. - ?
和菲嘉立: #include <string.h> // for strlen strcpy strcmp#include <stdio.h> // for printf scanf#include <stdlib.h> // for malloc char *strs[2];#ifndef strdup char *strdup(const char *src) // strdup 不是标准库函数, 不过大多数编译器上有实现 { int len; char *tmp = ...
北林区17225333618: 关于C语言数组指针的应用 - ?
和菲嘉立: 应该会有的,这个叫行指针 它指向的数组是有10个元素的数组 int b[10],c[11]; int (*a)[10] = &b;//编译通过 int (*d)[10] = &c;//编译不通过
北林区17225333618: 关于c中的指针字符串数组嘎,刚学c,求高手指教啊 - ?
和菲嘉立: 这问题简单:例 strcpy(p[0],"数学") printf("%s\n",p[0]); 输出数学,这个你应该明白.char *p[3]; p[0]="数学";这里的的先定义一个指针数组,强调是一个数组,3个元素,每个元素都是一个指针,p[0]是一个指针 p[0]="数学" 把一个字符...
北林区17225333618: 输出数组 指针 c语言 - ?
和菲嘉立: 因为在执行了++p和p++之后,p已经指向了array[2]的位置了
北林区17225333618: 求C语言高手,关于指针的?
和菲嘉立: 就是用指针数组输出下面的字符串 #include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { int i; char *string[7]= { "******************", "* 1.add *", "* 2.subtract *", "* 3.multiply *", "* 4.divide *", "* 5.print menu *", "**********...