日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

对字符数组输入输出数组名是否加取地址符的一些理解

發布時間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对字符数组输入输出数组名是否加取地址符的一些理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符數組名的兩個含義:

定義了字符型數組char name[10]。name有兩個含義

  1. 一個是代表著name這個數組第一個位置的地址,也就是name[0]的地址。可以說name就等價于&name[0]。
  2. 還有一種意思就是指代name整個數組。&name 就是整個數組的首地址。所以name和&name取得的地址是相同的。

下面舉一個簡單的例子:

#include<stdio.h>
int main(void)
{char name[10]={"hello csdn"};if(name==&name[0]){printf("name與&name[0]取得的地址相同,地址為:%p",name);}else{printf("取得的地址不同");}return 0;

以下為代碼輸出結果:

name和&name區別

不同點在于:name+1表示的是數組第二個元素的地址,而&name+1表示的是整個數組后又一個name數組的首地址,即&name[10]后一個新的name數組的首地址。如下:`

#include<stdio.h>
int main(void)
{char name[10]={"hello csdn"};printf("name+1的地址:%p\n",name+1);printf("&name+1的地址:%p\n",&name+1);return 0;
}

輸出:

總結

所以說scanf("%s",name);和scanf("%s",&name);執行后的結果是一樣的,都是name的首地址,都是給字符數組name賦值。推薦用 scanf("%s",name); ,第二種不容易理解也容易犯錯,有些編譯軟件也不支持會報錯。

補充

printf("%s",name); 字符串的讀取。是從字符數組第一個地址name所對應的數據開始,對應ASCLL將其轉化輸出,直到遇見’\0’為止。這也就解釋了printf("%s",name);中的name既然是地址,為啥不加*號,不是*name而是name。就是因為它的輸出控制符的%s的作用。如果是printf("%d",name);的話,那么它輸出的將是name第一個元素的地址。

總結

以上是生活随笔為你收集整理的对字符数组输入输出数组名是否加取地址符的一些理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。