C语言中指针问题求解,这张图什么意思?

作者&投稿:戚宜 (若有异议请与网页底部的电邮联系)
左边的图:
有一个两字节的数组,名称为 urn
它有三组数据,分别为:
urn[0] = 0x100; //它保存在 00DC的内存地址
urn[1] = 0x200; //它保存在 00DE的内存地址
urn[2] = 0x300; //它保存在 00F0的内存地址
ptrl是一个两字节的指针,它指向urn[0],即 00DC 的位置
*ptrl是表示指针指向的值,当前为 0x100
右边的图:
ptrl = urn; //把ptrl的值,设置为urn的起始地址
ptrl指针的内存地址为 0x0C00,它的值为 0x00DC,即ptrl指针 指向urn[0]的地址。
因为 ptrl是两字节指针,如果执行 ptrl++,即指针加1操作,那么 ptrl的值就改变为 0x00DE。

c语言问题,这图下面四个指针的区别是什么呢~


其实这里有这么几点需要明白:
我们通常会先声明定义一个变量。如:int a ; a=10;那么我们就在内存中开辟了一块空间,我们把这空间用a来标记。我们把a叫做整型变量!很容易理解a变量此时的值或内容是10,但还有一个问题你要知道,我们怎么样才能找到a在内存中的位置?这就是用这块内存的开始的地址来标识的(加上不同类型的内存占有长度一定,这样就可以完全确定在内存中的区间),从前面这些说明我们知道任何一个变量(包括函数。函数也要调入内存中)都有一个描述的地址,我们把这地址也叫指针!
那么前面的a的地址也可一存到一个变量中,为了区别是不是存放地址的变量,我们把后一种变量叫指针变量 如:用 int *p1来定义,用 *来区别。我们把p1叫指针变量,而 在声明中的 * 可以理解为“指向。。。”,我们用英语的习惯(类似古文)从由向左翻译:p1是指向整型的指针变量
而后面的前置运算符如:*p1 &a等(注意此处的*不是声明中的*)。*表示:“。。。的内容(值)”&表示:“。。。的地址”。看下面语句的解释:
int a, *p1;//定义声明指针变量p1,* 可以理解为“指向。。。”
a=10;
p1=&a;//把a的地址赋值给指针变量p1)&表示:“。。。的地址”。
a=*p1;//p1里面是a的地址,表示把p1指向的变量a的值赋值给a,*)。*表示:“。。。的内容(值)”

一道关于C语言指针的题目(图片)
答:copy[i] = p[i]; //或者 copy[i] = *(p + i);第四个问题 排序 这部分你再看一下书上吧 这个排序不正确 第五个问题 也是最后一个了,最后在给四角赋值的时候,没有交换原来元素,这样会使得元素重复/丢失 综合第三个第四个问题,可以改成 建立一个指针数组,查找最小的四个值,把...

c语言指针的问题,我想了很久还是想不通,我看网上视频,也就是第一张图...
答:因为数据类型不同。图二char p[40];是数组。那么p就是指向数组的指针。也就可以不用*了。(就是这么定义的,如果想深入了解为什么,可以找找编译原理方面的书。)新手很容易被C语言的*,&绕晕。要理清楚思路。

学习c语言过程遇到一个难缠的指针问题,求解
答:很简单啊。数组名在等号右边时,类型是int *,表示指向数组首元素的指针。第8行等号右边arr的类型是int *,强转为char *,此时仍然指向数组中的元素1, 加上 i * sizeof(int) = 0,也就是让elemAddr指向元素1;第9行就通过解引用指针,取出元素1的值1;然后进行下一次循环,i的值是1,此时...

C语言指针问题
答:一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

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

关于C语言中的指针问题?
答:同学你是没理解指针是什么意思。Root = NULL的意思是将Root指向一处空的位置,这时候Root里面的一切都是空的(没有开辟内存空间),当运行到Root->data.value的时候,程序尝试读取Root里面的data元素,这时候就会出现读取内存越界,因为Root指向的地方是空(没有分配内存)。

如下图所示的c语言的关于指针问题
答:main中:BiTNode *T;create(T);Status Create(BiTree *T){ T=(BiTree*)malloc(...);}

关于c语言指针的问题,求解尤其是最后那个那句 scanf("%d",&number[i...
答:形参是个指针,下面的for循环中的数组元素的表现形式,决定了函数调用的时候实参应该是个数组名,假设传过来的是数组名a的话,那么number也成了数组a的起始元素的地址。因为:number+i是数组中第i个元素的地址,所以第i个元素就是*(number+i),又在c中*(number+i)与number[i]无条件等价,所以你...

C语言里指针问题,程序如下: #define DATA *((Uint16 *)0x100000) *(&...
答:(&DATA+1) = DATA_B; //等效于 *(&*((Uint16 *)0x100000)+1) = DATA_B;含义 是 取x的地址,再+1,再 取指针,这个 变量 记做 y 由于 x 是 Uint16 类型,占 2个字节,所以 指针 +1 就是 地址+2,于是 &y=0x100002,那么 *(&DATA+1) = DATA_B; 执行的 结果...

数组指针C语言的问题,这道题的cd选项等效成什么?
答:(1) int (*cp)[5], 这里有小括号,所以 cp 是1个指针,(又叫行指针),注意,是一个指针,后面[5]表示这个指针用于指向有5列的2维数组。 cp=c; 说明,c 是2维数组,它每行有5列元素,现在让cp指向了第一行。 cp=&c[0][0]; 若 cp+j 则指向 第 j 行。(2) C语言中...