| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1349 人关注过本帖
标题:关于c语言的指针小弟有点不明白
只看楼主 加入收藏
wlz0302520
Rank: 2
等 级:论坛游民
帖 子:43
专家分:16
注 册:2010-11-17
收藏
得分:1 
你改成cj[0][0]这应该是它的首地址吧,我今天刚好看书到这里  呵呵!按我的理解就是区别一个是地址一个是常量!
2011-02-18 22:22
liangchen424
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-2-18
收藏
得分:0 
回复 11楼 wlz0302520
我是问为什么改cj[0]不行?这也是首地址~~~~~~~~~~~~我刚刚试了是编译器原因原因,在tc上是可以的,在vc还是老样子   
2011-02-19 00:16
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:1 
回复 楼主 liangchen424
cj是二维数组名称,其本质是:指向数组的指针常量(即行指针常量),其指类为float[4];
cj[0]相当于&cj[0][0],其本质是:指向float的指针表达式,其指类为float;
两个指针的指类不同,所以是两种不同的指针。
进一步解释:
cj+1将加16B,而cj[0]+1将加4B

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 17:03
wolonga123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:35
注 册:2010-9-16
收藏
得分:1 
你传递的是地址,而不是实实在在的数
2011-02-19 22:02
cacker
该用户已被删除
收藏
得分:1 
提示: 作者被禁止或删除 内容自动屏蔽
2011-02-19 22:08
wolonga123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:35
注 册:2010-9-16
收藏
得分:0 
回复 楼主 liangchen424
指针倒都是指针,表示的不一样如cj+1表示cj[0][1],cj[0]+1表示cj[1][0],不知道我的理解错了没
2011-02-19 22:13
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
回复 9楼 liangchen424
呵呵, 如果你认为一个函数把一个数组作为参数和把一个数组的某一元素作为参数调用一样的话,我无话可说! 我看的是Stephen G。Kochan的《Programming in C》,里面在函数那章特意一页就讲了这方面的东西。good luck~~

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-02-19 22:31
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用wolonga123在2011-2-19 22:13:35的发言:

指针倒都是指针,表示的不一样如cj+1表示cj[0][1],cj[0]+1表示cj[1][0],不知道我的理解错了没
不是一般的错。
希望大家能稍微下点功夫,看我在“指针、数组”中的回帖,用一点时间,能搞清楚一年半载也不容易搞清楚的东西,这是值得的。有问题的话,问出来,我会尽量及时答复的。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 22:50
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
首先,指针有两个要素:
1、首地址(学过C的都知道)
2、指类(朱某人的专用术语):指针所指向的空间的类型。
指类的概念非常重要,是比首地址概念更重要、更要命的概念,原因如下:
指针之间的操作必须保证指针指类的一致性,如果参加运算的两个指针的指类不同,则至少会有编译的警告,多数是错误报告;
指针+(-)整型量,能使指针的指向发生更改,而更改量取决于指类长度!即,指针+1将得到指针值+sizeof(指针指类)的效果。
指针指类的判别方法是:在定义指针、数组的语句中,去掉一个*,剩余的内容与基本类型结合,就成为指类。例如:

char *cp;//去掉一个*,类型部分只剩char,那么char就是cp的指类;或者说,C语言对于cp所指向的空间仅按char解释。

float **pfp;//去掉一个*,类型部分是float *,那么float *就是fpf的指类;或者说,fpf指向类型为(float *)的指针空间(变量)(这里我用空间而不用变量,因为变量这个名词太混乱,简直就是一本混账);

int *ar[10];//这里要复杂些。首先在定义数组ar的语句中,有两个符号:*和[],按优先级,[]优先于*,因此[]优先与ar结合;此时将结合不是很紧密的部分与ar[10]分开,将得到:
int*      ar[10];从这里可以很清楚的知道,int*是数组ar的每个元素的类型,而ar是数组;

int (*ar)[10];//这个更复杂。由于()的存在,*与ar优先结合,此时可以将[10]前置,与int组合成:
int[10]     *ar;从这里可以很清楚地知道,int[10]是指针变量ar的指类,ar是指针变量!
接着,由于ar的指类是int[10](由10个int元素组成的一段连续存储空间,为40B),长度为40B,所以ar+1将移动40B!


当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 22:53
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:1 
趁热打铁
程序代码:
#include<stdio.h>

void Swap(void *a,void *b)
{
    int t;
   
    t = *(int *)b;
    *(int *)b = *(int *)a;
    *(int *)a = t;
}

int main(void)
{

    int a=888,c=999;
    void *b;

    b=&a;
    printf("%d %d\n",*(int *)b,a);
    *(int *)b=1000;
    printf("%d %d\n",*(int *)b,a);

    printf("%d %d\n",a,c);
    Swap(&a,&c);
    b=&c;
    printf("%d %d\n",a,*(int *)b);

    getchar();
    return 0;
}


小代码,大智慧
2011-02-19 23:13
快速回复:关于c语言的指针小弟有点不明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013076 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved