您的位置:

c语言指针详解,C语言指针笔记

本文目录一览:

求解C语言指针,讲解越详细越好

p是一个包含四个指向char指针的数组

pp是一个指向char类型指针的指针 也就是一个二维指针 所以在输出的时候*pp就相当于p *(*pp+1)相当于*(p+1)也就是想当于p[1]

这个就是输出每个字符串的第二个字母 夜也就是O E I E

C语言指针,求题目详解

您好,很高兴回答您的问题。

您的这个程序,主函数中的第一句话表示p1 和str都是数组名,指向数组中的第一个元素。p2是指针变量,指向的是字符型数据。第二句话表示p2这个指针变量指向的是包含有abc等三个元素的字符型数组。strcpy(str+1,strcat(p1,p2))表示现将p2所指向的内容添加到p1这个数组的结尾处,并且存放在p1中,那么做完之后p1里的内容为abcabc。接下来执行strcpy(str+1,p1)表示把此时p1中的内容拷贝到str中,是从str+1这个位置开始。因为str是数组名,指向的是数组的第一个元素,那么str+1,就是从str数组的第二个元素位置开始,所以最终得到的结果就是aabcabc。

以上就是我对这个问题的回答,希望您能帮助到您。

C语言 INT (*PP) [2] 指针的疑问

int

*pz[2]才是指向2个int的指针,int(*pz)[2]是以个指向含有两个元素的数组,指向的类型是int型的指针

c语言 求详解啊~~~~ 指针

char *p=”happy new year”;//这儿的“”有问题,不因该用中文输入法输入该符号,应切换输入法

char *q=p;

int k;

for (k=1;k8;k++)//如果要全部输出上面的字符串,这个位置的k值应该改一下,k应该为15,因为空格也要占空间

{ putchar(*q);

q++;

}

C语言指针数组问题 求高手详解

首先m[12]={0,2,4,6,8,10,12,14,16,18,20,22}

语句

if(k3) p[k]=m+2*k*k;

的计算过程序,当k=0时,p[0]=m也就是指针p[0]指向的是数组m的开始

当k=1时,p[1]=m+2;因此p[1]指向m+2的位置,也就是从数字4开始的位置

当k=2时,p[2]=m+8;因此p[1]指向m+8开始的位置,也就是m[8]开始的位置,即数组m中的第9个元素的地址,也就是16

再来看for中循环语句中的指针表达式,首先下标运算符p[k]是与*(p+k)等价的,

(*(p+k))[4-k];

=(p[k])[4-k]

=*(p[k]+4-k) //注意这一步,不能把括号折开来算,而应按p[k]与*(p+k)等

价的替换来计算,不然在某些地方会出错。

=*(p[k][0]+4-k) //在计算地址相加时,应把p[k]这样的式子转换为前面带有

地址运算符的表达式才能直接相加,否则会出错,因为

p[k]就是指的p[k][0]的地址,因此应这样换算

=*(p[k][4-k]) //这里就可以地址直接相加了

=p[k][4-k] //这是最后结果。

上面的计算如果你的理解能力强,你也可以用文字去描术,什么指针偏移多少个单位,又指向哪里,这样来描术,但本人认为文字描术容易出错,因此采用数学的计算方法,科学,安全,不易错。

再来看p[k][4-k]究竟是什么,

当k=0时,就是p[0][4-0]因此,因为p[0]是指向的数组m的开始,因此p[0][4]就是指的数组中下标为4的元素,也就是8

当k=1时,就是p[1][4-1]=p[1][3],因为p[1]是指向的数组m+2以数字4开始的位置,因此p[1][3]就是指的从4的位置起(4的下标对于指针p[1]来讲为0),向后的下标为3的位置的元素,也就是10

当k=2时,就是p[2][4-2]结果就是m+8开始的下标为2的元素的值,就是20

因此最后sum的值是8+10+20=38

C语言指针运算详解

C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。

通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。

我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。

因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。