c语言4的个指针问题
指针*的优先级大于+号
选项A。*p + 2 ,先取p[0]的值1,然后加上2 ,等于3
选项B,*(p+2),先把p的地址加2,取p[2]的值,等于3
选项C,p+2相当于把p的起始地址加2*sizoif(int),返回值是地址,肯定不等于3
选项D,*p += 2跟A项一样
第一题
strcpy(str+1,p2+1); strcpy(str+3,p1+3);
两个拷贝函数
第一个从p2这个字符串的第二位开始考,str的第二位开始接收,到\0为止
结果str字符串为Afgh\0FG
第二个同理:str为 Afgd\0FG
但是printf只打印到\0所以答案为D
第二个问题
其实内存是一个线性的空间而已
p+10 正好跳过了str【】【10】的10个空间。
China\0\0\0\0\0Beijing\0\0\0内存中的形式
第三个问题
while循环最后一次 那就是 pb = b1;
那么strcpy以后b1完全同等于b2
第四个问题
for之前
ps所在的位置是XYZ\0中的\0位置
puts与printf一样到\0结束 每次往回走一位
#include<stdio.h>
#define N 3
int arr[N][N]={1 ,2 ,3 ,4 ,
5 ,6 ,7 ,8 ,
9};
int temp[N][N];
void left();
void right();
void main()
{ char c;
printf("Input \"l\" to turn left, \"r\"to turn right \"Q\" to quit:\n");
while(1)
{ c=getch();
switch (c)
{
case 'l':;
case 'L':left();break;
case 'r': ;
case 'R':right();break;
case 'q': ;
case 'Q':exit(0);
default : break;
}
printf("\n");
printf("Input \"l\" to turn left, \"r\"to turn right \"Q\" to quit:\n");
}
getch();
}
void right()
{ int i,j;
for(i=0;i<N;i++)
for(j =0;j<N;j++)
{
temp[j][N-i-1]=arr[i][j];
}
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{arr[i][j]=temp[i][j];
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
void left()
{
int i,j;
for(i=0;i<N;i++)
for(j =0;j<N;j++)
{
temp[N-j-1][i]=arr[i][j];
}
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{arr[i][j]=temp[i][j];
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
1 转置矩阵用Matlab好了 又快又方便
c语言 指针问题
没有问题,这是习惯写法,只是不能通过s往里面写入,更精确的写法是这样的:const char *s = "\\ta\\017bc";该字符串常量 所占字节数就是6= 5+1
C语言指针问题?
调用结束后,所有实际参数的值均不会发生变化。但是swap3中*pa,*pb发生的交换(实际就是主函数中a和b的值发生了交换)
C语言指针问题(求高人指点啊)
让我来帮你综合一下!!!1、int *p,*q;q=p;这句基本是对的(但要看你怎么用),首先定义了*P,*q两个指针,q=p这句是将地址p赋给了q,没有问题;看下面两个句子:printf("%d",q);---这个句子是正确的,它只是把q中的地址(既p的地址)输出!!printf("%d",*q);---但这个句子...
关于c语言的指针强制类型转换的问题,如图,定义了4个char型数组,其中两...
出现这样的问题是因为在这个16位系统中,要求所有的16位或者32微数据都是对齐的数据。这个对齐指的是,数据从偶数地址开始存放。这样的话,这个存放在存储器中的数据可以更有效地存取;否则这个数据的存取将需要花更多的时间(更根本的原因要深入到微机原理课程了。而实际上16位数据一定占用了两个地址所...
c语言指针 问题
lz没有理解C的精妙之处啊,虽然说这也是C经常被诟病之处 C语言的语法力图使声明和使用相一致(<The C Programming Language>)例如这里的定义\/声明 int *pointer_1 这里可以理解为 *pointer_1的类型是int,那么显然*运算符是做单目运算符解,显然pointer_1是一个指针 整理一下刚才的思路,这里定义\/声明...
C语言中关于指针问题
故此时(*w+1)[4]便相当于某一级指针向后偏移4个单位的值(与一维数组a[4]的意思差不多)。所以答案B中在(*w+1)[4]的基础上再加个*便有语法错了,就跟*a[4]一样。再所以,答案A是正确的也就不难理解了。按你题目的意思,答案D你应该理解了。还不理解就补充问题吧。。
C语言指针问题
回答:首先: float a[10],*p,*q; p=&a[4],q=&a[7]; 那q-p=2(a[4]与a[7]之间有两个元素) ***这里就不对了,q-p = 3 不是等于2, 可以用printf("%d",q-p);看看。 p+3-p = 12 是地址按“字节”排列的位置差,表示p+3和p之间有12个字节 q-p = 3 表示q和p之间有3个...
请教C语言指针问题
首先是数组的概念,很多人对C语言的数组的概念理解并不到位,有时间可以找打相关的资料看一看,像a这样的一维整形数组可以隐式转换为 int*, 所以你后面的 **b = a; 这句代码是错误的。很多人对指针的理解也是不太正确的,其实指针的意思并不复杂,指针保存的是地址对象,同时它还需要携带一个信息...
c语言问题 用指针将一个a[4][4] = { 1,1,1,1, 2,2,2,2, 3,3,3,3,4...
include <stdio.h>int main(){int a[4][4]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%d ",a[j][i]);}printf("\\n");}return 0;}
c语言 指针问题 怎么会是这个结果?
q[3][0]相当于*q[3],即20 比如int a[]={1,2,3,4};int *p=a;则p[0]相当于*p即为1,p[1]相当于*(p+1)即为2,指针数组同理
师轰枢绮: 这位朋友,指针作用可大了,没有学好指针你等于没有学好C语言,指针是C语言的重点和难点.指针能够有效的表示数据结构;能动态分配内存;能较方便的使用字符串;有效的使用数组……指针直接与数据等的储存地址有关,是比较重要的.比如:值传递不如地址传递高效,因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据,使效率提高,特别在频繁赋值等情况下(注意:形参的改变会影响实参的值!)至于如何有效运用指针,这只有你的编程经验才能回答你的,呵呵 兄弟跟你说件事情,微软公司核心代码是用指针实现的,你说它的作用如何?
甘孜县13295325479: c语言中的指针问题 - ?
师轰枢绮: 下面给你个例子 #include <stdio.h> void main() { int *p; int a[4]= {1,2,3,4}; p = a; }在上面的环境下,p是指向数组a[0]的,p++后p就指向a[1],(*p)++其实是值1,同时p指向a[1]
甘孜县13295325479: C语言的 指针问题 - ?
师轰枢绮: 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C...
甘孜县13295325479: C语言的指针问题 - ?
师轰枢绮: 指针,说白了就是储存数据内存段的地址.打个比方说,你家的门牌号是306,那么你家中回来一些客人,这些客人就相当是一些变量,而门牌号就说明了地址,如果张三在你家,另一个人要找到他,那么此时我们只需要告诉那人306,就相当...
甘孜县13295325479: C语言关于指针的一个小问题:int (*p)[4]书上说P是指向具有4个元素的一维数组的指针,而且这里p可以等于一 - ?
师轰枢绮: 二维数组其实也是一个数组,你可以这样想 例如 int a[2][3]={{1,2,1},{3,4,3}); 你拆开看,可以作为int a[2]表示有两个元素的数组,后面的[3]表示,前面部分每个元素也是一个数组.这个数组还有3个元素.指向这个数组指针,int (*p)[3];也同样,...
甘孜县13295325479: c语言指针问题! - ?
师轰枢绮: #include #include void swap(int *p,int *q){ int t; t=*p;*p=*q;*q=t;}int main(int argc, char *argv[]){ int num1=10; int num2=20; int...
甘孜县13295325479: 请教C语言关于指针的问题 - ?
师轰枢绮: (1)int *p,*q; q=p; // 未经赋值的指针变量不能使用 int a,*p,*q; p=q=&a; // 这个应该是正确的(2)int a,*p,*q; q=&a; p=*q; // p=*q;明显错误 int a=20,*p; *p=a; //*p=a错误,可以改成p=&a就对了,*p是指针变量p所指向的变量,连地址都没有 ,...
甘孜县13295325479: C语言中关于指针问题 - ?
师轰枢绮: 我刚刚在VS2010里试了一下, B和C都是错的.计算机题目应该都是单选的, 所以有可能是你有一点的笔误, B如果是(*w+1)[4]就正确了.首先我给你一个最简单的我自己总结的方法吧, 要想从数组或者指针中取数据的话, 要满足这个公式(...
甘孜县13295325479: 碰到的一个指针问题,C语言 - ?
师轰枢绮: 就你写的代码而言 lastValue是个野指针,换句话说,他可能指向任意的地址,这当然是错误的操作
甘孜县13295325479: c语言指针问题?
师轰枢绮: 先看括号里的内容,p[4],说明p是一个数组,有4个元素.那么数组的元素类型呢? 再看括号外面,int *,也就是说数组的元素是指向int型的指针. 所以,p是一个有4个元素的int型指针的数组. 括号在这里是多余的,因为[]操作符的优先级大于*,所以可以写为 int *p[4] 更符合指针数组的惯常写法.