鱼C论坛

 找回密码
 立即注册
查看: 1571|回复: 18

[已解决]一些關於字元數組和參照的問題

[复制链接]
发表于 2022-5-25 14:29:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        char[] myabc = {'a', 'b', 'c'};
        char[] myxyz = myabc;
        myxyz[0] = 'x';
        myxyz[1] = 'y';
        myxyz[2] = 'z';
        for(char c : myabc)
                System.out.println(c);
教材中看到這樣一串代碼,問for迴圈輸出結果為何
不過我放入程式並沒有辦法正常運行的樣子(會報錯
數組的長度是可以放在儲存型態後面,變量前面的嗎?
數組資料可以這樣直接放入另一個數組?(或者說怎麼將一個數組的資料全部放入另一個數組?
char c : myabc和System.out.println(c),這兩個代碼教材前面還沒有介紹過,是什麼用途?
是要把myabc中的字元依序放入變量c並打印?
那為什麼不直接用printf()函數輸出?

它還有承上題,如何讓myabc與myxyz這兩個數組,分別擁有不同的參照
這教材前面也還沒有介紹過參照(Reference),所以我上網查了一下,似乎就是給一個資料儲存位址別名
不過一個程式裡面什麼時候會有給變量別名的需要?(雖然網路上有不少如何使用的教學,不過沒怎麼看到何時需要使用的部分,如果給一個很長的變量名稱縮寫、小名等確實會比較好呼叫,但這不是會很ˋ容易導致名稱出現重複嗎?還是說同一個參照可以同時做為不同的資料儲存位址的別名(應該不行吧...?



最佳答案
2022-5-25 14:33:08
看起来像JAVA 并不是c代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-25 14:33:08 | 显示全部楼层    本楼为最佳答案   
看起来像JAVA 并不是c代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
一隻太平洋睡鯊 + 2 + 2 + 2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 14:48:57 | 显示全部楼层
wp231957 发表于 2022-5-25 14:33
看起来像JAVA 并不是c代码


啊這啊這啊這
是這樣嗎!!??
這樣的話這題我跳過好了
不過我還是想問一下
C語言中如果把一個數組整個放入另一個數組呢?(還是說只能一個資料一個資料的放?
還有是C語言中的參照都是在什麼情況會需要用啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:02:13 | 显示全部楼层
本帖最后由 jhq999 于 2022-5-25 15:13 编辑
char myabc[] = {'a', 'b', 'c'};
        char* myxyz = myabc;
        myxyz[0] = 'x';
        myxyz[1] = 'y';
        myxyz[2] = 'z';
        for(char c : myabc)
               printf("%c\n",c);
char myabc[] = {'a', 'b', 'c'},cmdstr[8]="echo a\n";
        char* myxyz = myabc;
        myxyz[0] = 'x';
        myxyz[1] = 'y';
        myxyz[2] = 'z';
        for(char c : myabc)
               cmdstr[5]=c,system(cmdstr);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:04:02 From FishC Mobile | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-25 14:48
啊這啊這啊這
是這樣嗎!!??
這樣的話這題我跳過好了

C++ 可以,C 只能一个一个元素复制,或用指针指向同个地址。

C++ 是面向对象
C 是面向过程

评分

参与人数 2荣誉 +6 鱼币 +6 贡献 +3 收起 理由
jhq999 + 3 + 3 无条件支持楼主!
一隻太平洋睡鯊 + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:09:01 | 显示全部楼层
我惊了,一本C语言的教材,竟然会出现java中的东西
这教材可以的,确实是挺不错的一本教材,敢问书名和作者是?
#include <stdio.h>
#include <string.h>

int main(void) {
    int a[10], b[10];
    for(size_t i = 0; i < 10; ++i) a[i] = i;
    memcpy(b, a, sizeof(a));
    for(size_t i = 0; i < 10; ++i) printf("%d ", b[i]);
    puts("");
    return 0;
}

"參照" 是?
声明?
函数声明?
变量声明?

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
一隻太平洋睡鯊 + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 15:09:44 | 显示全部楼层

這個代碼也不能正常運行唉,是編譯器不同的問題?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 15:11:20 | 显示全部楼层
傻眼貓咪 发表于 2022-5-25 15:04
C++ 可以,C 只能一个一个元素复制,或用指针指向同个地址。

C++ 是面向对象

原來是這樣啊!
那參照一般都是使用在什麼情況啊?取太簡短的別名不會容易導致名稱出現重複嗎?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:13:11 | 显示全部楼层
參照(Reference)
这是C++中的东西,我们叫引用,java中好像也有这个概念
忘了,java好久没有用了
C中没有參照(Reference)

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 原來如此阿&amp;gt;&amp;quot;&amp;lt;

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:15:27 | 显示全部楼层
c++了解一下
#include <iostream>

using std::cout, std::endl;

int main() {
    int a = 123;
    int &ra = a;        // Reference
    cout << ra << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:15:59 | 显示全部楼层
本帖最后由 jhq999 于 2022-5-25 15:19 编辑
一隻太平洋睡鯊 发表于 2022-5-25 15:09
這個代碼也不能正常運行唉,是編譯器不同的問題?


vs 2012 c++
无标题.png

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 原來是C++的(尷尬

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 15:23:22 | 显示全部楼层
人造人 发表于 2022-5-25 15:09
我惊了,一本C语言的教材,竟然会出现java中的东西
这教材可以的,确实是挺不错的一本教材,敢问书名和作 ...

我也驚了,這本書給我一種沒給校對看過的感覺
虧我當時還是上網看了很多才買的(也是有人推薦的,怕不是工商OTL,難道那個推薦的是作者自己!? 啊這
C語言入門精要,康廷數位 著,藍海文化出版
奇怪我現在找不到他們自己的網站(我記得之前有看到過
怕不是跑路了(為什麼他們的書還能繼續賣阿

我用這串代碼第6行會報錯唉,是編譯器不同的問題嗎?

我又去看了看,啊這,reference是C++的
C語言沒有Call by reference
C只有Call by value! 能做到的僅是把位址當作value使用來進行call by value

啊這,這本書還出現了C++


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:30:57 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-25 15:23
我也驚了,這本書給我一種沒給校對看過的感覺
虧我當時還是上網看了很多才買的(也是有人推薦的,怕不是 ...

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 15:36:46 | 显示全部楼层

話說我用上面那個代碼
#include <stdio.h>
#include <string.h>

int main(void) {
    int a[10], b[10];
    for(size_t i = 0; i < 10; ++i) a[i] = i;
    memcpy(b, a, sizeof(a));
    for(size_t i = 0; i < 10; ++i) printf("%d ", b[i]);
    puts("");
    return 0;
}
for(size_t i = 0; i < 10; ++i) a[i] = i;這一行會報錯唉,是為什麼啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:41:46 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-25 15:36
話說我用上面那個代碼

for(size_t i = 0; i < 10; ++i) a = i;這一行會報錯唉,是為什麼啊?

你用的什么编译器?
$ ls
main.c
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    int a[10], b[10];
    for(size_t i = 0; i < 10; ++i) a[i] = i;
    memcpy(b, a, sizeof(a));
    for(size_t i = 0; i < 10; ++i) printf("%d ", b[i]);
    puts("");
    return 0;
}
$ gcc --version
gcc (GCC) 12.1.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -g -Wall -o main main.c
$ ./main
0 1 2 3 4 5 6 7 8 9
$

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:42:16 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-25 15:36
話說我用上面那個代碼

for(size_t i = 0; i < 10; ++i) a = i;這一行會報錯唉,是為什麼啊?

vc6 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 15:43:03 | 显示全部楼层
vc6 <==> Microsoft Visual C++ 6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 19:31:04 | 显示全部楼层
人造人 发表于 2022-5-25 15:41
你用的什么编译器?

Dev-C++ 5.11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 21:23:42 | 显示全部楼层

喔,我知道了,這個編譯器拒絕在for迴圈裡面宣告型態
剛剛試了
#include <stdio.h>

int main(void) {
    int mydArray[2][3];
    mydArray[0][0] = 100;
    mydArray[0][1] = 200;
    mydArray[0][2] = 3000;
    mydArray[1][0] = 111;
    mydArray[1][1] = 222;
    mydArray[1][2] = 333;
    for(int i=0; i<2; i++)
        {
            for(int j=0; j<3; j++)
            {
                    printf("%d\n", mydArray[i][j]);
                }
        } 
    return 0;
}
這樣這個編譯器會報錯
#include <stdio.h>

int main(void) {
    int mydArray[2][3];
    mydArray[0][0] = 100;
    mydArray[0][1] = 200;
    mydArray[0][2] = 3000;
    mydArray[1][0] = 111;
    mydArray[1][1] = 222;
    mydArray[1][2] = 333;
    int i , j;
    for(i=0; i<2; i++)
        {
            for(j=0; j<3; j++)
            {
                    printf("%d\n", mydArray[i][j]);
                }
        } 
    return 0;
}
這樣就能正常運行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表