标题:还是指针
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用邹特强在2017-2-11 15:28:49的发言:

多谢版主的回复,但并没有完全回答我的问题,能否看下我回答二楼的内容,指教下

可能给那些指针与“*”、字符串与“*”、数组与“*”扰乱了心思,记得在之前有个贴也提到,可能没留意到。
这些*、**、***....只是个名堂,不要太执着这些名堂,要搞清楚实质是些什么。
如这样看看,是不是更清楚些,name数组实质存储的是数值:
#include <stdio.h>
int main()
{
    char s1[] = "apple";
    char s2[] = "orrange";
    char s3[] = "grape";
    unsigned long name[3] = {(unsigned long)s1, (unsigned long)s2, (unsigned long)s3};
    int i;
    for (i=0; i<3; i++)
        printf("\n%s", (char *)name[i]);
}
收到的鲜花
  • 炎天2017-02-11 22:31 送鲜花  6朵   附言:好文章
2017-02-11 21:24
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
回复 4楼 邹特强
char * str[3];
int i;
for(i=0;i<3;i++)
scanf("%d",str[i]);
定义了指针数组,每个数组元素都是一个指针, 但是没有赋给它们具体明确的地方, 野指针,就会随便指向一个地方

早知做人那么辛苦!  当初不应该下凡
2017-02-11 22:37
藤田惠美
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2016-10-3
得分:0 
回复 4楼 邹特强
我是菜鸟!我是这样理解的:str[i]存放的是一个内存地址,如果随意去赋值的话,可能会误操作系统中的重要数据。因为你不知道你输入的内存地址存储的内容是什么,处于安全考虑,会认为是错误的。不知道是不是可以这样理解?
2017-02-14 15:30
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
得分:0 
哈,放个测试,让大家斟酌看看为啥第三个printf输出会内存越界。

程序代码:
#include <stdio.h>

int main(int argc, char **argv)
{
    char *a[3] = {"11111","22222","33333"};    //这里的字符串是属于常量字符串码?
    char **p = a;
        
    printf("%s\n",*p);    //输出11111
    a[0] = "abc";
    printf("%s\n",*p);    //输出abc
    p[0][3] = 'k' ;
    printf("%s\n",p[0]);    //这里会程序错误跳出,但编译正常
        
    return 0;
}
2017-02-14 16:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474121-1-1.html




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

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