鱼C论坛

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

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

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

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

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

x

  1.         char[] myabc = {'a', 'b', 'c'};
  2.         char[] myxyz = myabc;
  3.         myxyz[0] = 'x';
  4.         myxyz[1] = 'y';
  5.         myxyz[2] = 'z';
  6.         for(char c : myabc)
  7.                 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 编辑
  1. char myabc[] = {'a', 'b', 'c'};
  2.         char* myxyz = myabc;
  3.         myxyz[0] = 'x';
  4.         myxyz[1] = 'y';
  5.         myxyz[2] = 'z';
  6.         for(char c : myabc)
  7.                printf("%c\n",c);
复制代码
  1. char myabc[] = {'a', 'b', 'c'},cmdstr[8]="echo a\n";
  2.         char* myxyz = myabc;
  3.         myxyz[0] = 'x';
  4.         myxyz[1] = 'y';
  5.         myxyz[2] = 'z';
  6.         for(char c : myabc)
  7.                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中的东西
这教材可以的,确实是挺不错的一本教材,敢问书名和作者是?

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void) {
  4.     int a[10], b[10];
  5.     for(size_t i = 0; i < 10; ++i) a[i] = i;
  6.     memcpy(b, a, sizeof(a));
  7.     for(size_t i = 0; i < 10; ++i) printf("%d ", b[i]);
  8.     puts("");
  9.     return 0;
  10. }
复制代码


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

评分

参与人数 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 原來如此阿&gt;&quot;&lt;

查看全部评分

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

使用道具 举报

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

  2. using std::cout, std::endl;

  3. int main() {
  4.     int a = 123;
  5.     int &ra = a;        // Reference
  6.     cout << ra << endl;
  7.     return 0;
  8. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层

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

  3. int main(void) {
  4.     int a[10], b[10];
  5.     for(size_t i = 0; i < 10; ++i) a[i] = i;
  6.     memcpy(b, a, sizeof(a));
  7.     for(size_t i = 0; i < 10; ++i) printf("%d ", b[i]);
  8.     puts("");
  9.     return 0;
  10. }
复制代码

for(size_t i = 0; i < 10; ++i) a = i;這一行會報錯唉,是為什麼啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

  19. $ gcc -g -Wall -o main main.c
  20. $ ./main
  21. 0 1 2 3 4 5 6 7 8 9
  22. $
复制代码

评分

参与人数 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 | 显示全部楼层
  1. 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迴圈裡面宣告型態
剛剛試了
  1. #include <stdio.h>

  2. int main(void) {
  3.     int mydArray[2][3];
  4.     mydArray[0][0] = 100;
  5.     mydArray[0][1] = 200;
  6.     mydArray[0][2] = 3000;
  7.     mydArray[1][0] = 111;
  8.     mydArray[1][1] = 222;
  9.     mydArray[1][2] = 333;
  10.     for(int i=0; i<2; i++)
  11.         {
  12.             for(int j=0; j<3; j++)
  13.             {
  14.                     printf("%d\n", mydArray[i][j]);
  15.                 }
  16.         }
  17.     return 0;
  18. }
复制代码

這樣這個編譯器會報錯
  1. #include <stdio.h>

  2. int main(void) {
  3.     int mydArray[2][3];
  4.     mydArray[0][0] = 100;
  5.     mydArray[0][1] = 200;
  6.     mydArray[0][2] = 3000;
  7.     mydArray[1][0] = 111;
  8.     mydArray[1][1] = 222;
  9.     mydArray[1][2] = 333;
  10.     int i , j;
  11.     for(i=0; i<2; i++)
  12.         {
  13.             for(j=0; j<3; j++)
  14.             {
  15.                     printf("%d\n", mydArray[i][j]);
  16.                 }
  17.         }
  18.     return 0;
  19. }
复制代码

這樣就能正常運行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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