请教C语言指针问题

作者&投稿:伯牙吾台泰 (若有异议请与网页底部的电邮联系)
首先是数组的概念,很多人对C语言的数组的概念理解并不到位,有时间可以找打相关的资料看一看,像a这样的一维整形数组可以隐式转换为 int*, 所以你后面的 **b = a; 这句代码是错误的。
很多人对指针的理解也是不太正确的,其实指针的意思并不复杂,指针保存的是地址对象,同时它还需要携带一个信息就是该地址对象存储的内容的型别。所以 int **b; 中的 b一个地址对象,而该地址存储的内容是int*, 即一个整形的地址信息。所以后面的代码只能这样写 *b = a; 意思是什么通过前面的描述你应该清楚了。 然后++b的意思就比较难于解释了……
我们假设如下吧:
int a[] = {1, 2, 3, 4 ,5};假设数据a的首地址为0x000000FF;那么该数组的长度就是5*4Bytes=20Bytes了。(这里假设int型占用4个字节)
而int **b; 假设b的地址为 0x 0000FF00,而该地址的存储的数据的持续长度为4Bytes;(32位环境)
*b = a; 会把 0x000000FF这个地址值赋值给以地址0x0000FF00开始的4Bytes的空间里,这里我们假设机器为32位的,所以内存地址为32位。
++b 就是把存储在地址0x0000FF00这个地址的指针内容加1个单位,因为b为指针型别,所以这1个单位是4Bytes,所以在该地址存储的内容变为 0x000000FF+0x4 = 0x00000103;
我相信这样解释应该很清楚了?

**b是个二级指针,
a是一维数组,
这样不能赋值,要进行指针转换的

楼主是不是想知道s和a的值为什么会一样,而不是随机的值吧。s和a都是在还有,一般打印指针值用的格式控制串是%p。 在c语言里,((char *)*

int (**b)[]=a

C语言指针问题,求高手~~~

你这个起泡算法有问题,起泡算法应该是比较相邻两个元素的大小,根据这个看是否需要交换。
应该这么写:
void sortA(int *x)
{ int i,t,j,k;
for(i=0;i<10;i++)
*(x+i)=m[i];
for(j=0;j<9;j++)
for(k=1;k<10-j;k++)
if(*(x+k-1)>*(x+k))
{t=*(x+k-1);
*(x+k-1)=*(x+k);
*(x+k)=t;
}
}

#include#include#include #includeusing namespace std;
void toup(char *s){ bool flag = 1; while(*s != '\0') { if(flag){ *s= (*s)-32; flag = 0; } if(*s == ' ') flag=1; ++s; }}int main(){ char s[30]={0}; gets(s); toup(s); puts(s);}

c语言 指针问题
答:1:char s[5]={'A','B','C','D','E'};这是个字符数组的初始化,没有问题,但它不是以字符串结束符'\0'结尾的,所以它不是字符串。如果你是想将字符串"ABCDE"赋值给字符数组s,就应该使用char s[6]="ABCDE",字符数组s的大小要定义为6,因为需要一个字符用来存储'\0',它是一个...

C语言 链表 指针问题
答:1、删除指针,并不会释放他指向的内存地址。2、如果你指向的地址还需要用,为什么要删除其指针。同一个地址可以有多个指针。你可以在结构里定义2个链表指针,分别是正向和反向,这样你输入的的时候,就直接得到正反两个链表了。我写了案例,你参考吧。include <stdio.h>#include <malloc.h>#define ...

问两道C语言关于指针方面的问题
答:C)int *s,k;char *p,c;s=&k;p=&c;p='a';...D) iint *s,k;char *p,c;s=&k;p=&c;s=p;s=1;A,B是指针没赋值就使用,所以错。D选项中p是char指针,s是int指针,一般,s=p这里在编译时会报错或警告,因为类型不同,*s=1这里就有很严重的问题,因为s是int指针,指向的地方...

请教C语言指针问题,本人智商不够
答:看本尊指导你:(char*) 是强制类型转换的意思,就是把变量a 强制转换成 char类型的指针,而不用在乎a本身是什么类型。这就是区别。char * a 就是定义一个char 类型的指针变量,名字为a。a(int) 可以作为一个函数的声明,这个函数的返回值为 int* (i在C中,没有声明的变量类型都为int类型)...

c语言指针的问题,希望详解
答:一下内容纯属个人理解,存在误差也是难免,仅供参考 理解指针前需要理解几个相关的问题:1.对于非特定的内存分配是有系统进行动态分配的,既然动态了,那么分配的地址就会存在差异,这个系统内存分配算法相关,运气好点的,几次都会看到同一个地址。2.内存是动态移动的,而不是静止的,这个知道下就好了 ==...

c语言问题,关于指针的问题
答:显然p是一个指针变量。while()循环括号里的返回值,为0或NULL时,while循环直接结束。一、比如我们定义一个int型指针变量。int *p=NULL;初值为空。那么当执行while(p);时,只有p==NULL时,while循环才会结束。所以如果我们写while(p);printf。。。;那么只有当p为空时,后面的printf才会执行...

C语言指针问题
答:3、库函数也是函数,同样遵守C语言的调用准则。不知道你学C的时候学过“交换两个数的函数”这样的例子没有 如果有的话,你应该知道,这时候需要传指针(即地址)而不是传值。C语言本质上只有值传送。也就是说,你调用库函数的时候传过去的变量,其实是把变量的值复制一遍放到被调用函数的栈段里面,你...

C语言指针问题
答:假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义...

C语言 指针问题
答:p——p指针指向的变量的值。而一个普通变量x只有两个要素:&x、x &x——系统分配给x的内存地址;x——x的地址中存放的值,我们把这个值称为"变量x的值"。特别说明:*x是无意义的。现在来看11题的C,*PX=&X,*PX代表PX指针指向的变量的值(对应X的值),而&X是变量X的地址。左边是变量值...

C语言的数组和指针问题,谢谢高手的解答!
答:所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级...