㈠ c語言關於取值和取址
1、首先打開Visual C++,點擊左上角「文件」菜單按鈕,並點擊「新建」按鈕。在彈出的窗口中首先選擇「文件」選項卡,在左側列表中選取「C++ Source File」項。
㈡ 在c語言中a&b是什麼情況
在c語言中a&b是進行邏輯與運算。
&是C的位運算符的一種,進行邏輯與運算,格式是:變數1&變數2,進行計算時,將會把類型提升為int。二進制運算符&通過對兩個操作數一位一位的比較產生一個新的值,對於每個位,只有兩個操作數的對應位都為1時結果才為1。如10000001&11000000的結果為「10000000」。
(2)c語言的取地址符是什麼字母擴展閱讀:
&兩側的變數可以是建立指針的引用。聲明引用時,必須同時對其進行初始化,不能讓他指向其他變數。引用聲明完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
&兩側的變數只表示該引用名是目標變數名的一個別名,它本身不是一種數據類型,因此引用本身不佔存儲單元,系統也不給引用分配存儲單元。故對引用求地址,就是對目標變數求地址。
㈢ C語言中地址操作符、指針操作符分別是什麼
&是地址操作符。
e.g.
int a;
int *b;
b = &a; //&就是取a的地址,即是地址操作。
*是指針操作符,可以聲明指針,也可操作指針所指的數據;
int *p;
*p = 10;
㈣ C語言里,取地址運算符怎麼讀知道的來分享下。謝謝!!!
英文中這是「和」的意思,你可以讀成 And 。
㈤ 初學C語言,*是取指針目標運算符,&是取地址運算符,它們有什麼區別 通俗一點 謝謝
&是取地址運算 對任意變數都可以進行取地址操作如:int i , *pi ;pi=&i ;int **ppi ;ppi=&pi ;*是取指針目標運算符 其後跟隨的必須是指針類變數如:int i,*pi ;pi=&i ;*pi = 10 ; //相當於 i=10 ;*i=10; 這樣寫就是錯的,i不是指針類變數,所以 *i操作就是錯誤的語句。初學C語言,*是取指針目標運算符,&是取地址運算符,它們有什麼區別? 通俗一點 謝謝
㈥ c語言函數參數里的取地址符號是什麼意思
顧名思義,取地址符的用處 就是取它的地址,而編程過程中,取的都是變數存放在內存中的地址,通過地址可以直接訪問到存放在該地址里的數據。
㈦ C語言中地址符究竟是什麼
地址符& 就是獲得一個變數/常量/函數的內存地址,沒有別的含義。
scanf中,使用地址符,是因為scanf需要的是指針變數(因此指針變數不需要地址符),而普通變數需要通過地址符轉譯為指針使用。
charc,*p;
c='a';
p=&c;//這是地址符的「真諦」
scanf("%c",&c);
scanf("%c",p);
注意兩個scanf語句都是正確的。
㈧ c語言中"&取地址"是什麼意思
找到變數在內存空間的位置,對變數進行操作時,會找到該處。
㈨ c語言中取地址符和*有什麼區別
區別如下:
(1)兩者根本意義不同。*是指針的意思,而&是去地址的意思,這兩個相輔相成。
(2)用法不同。高級的c語言都是動態開辟內存,是使用malloc和free,這時就不用&了,因為取引用都是對於棧上的數據,在數據結構中,都是在堆上開辟數據容量。
(3)語言規則不同,變數類型加*就是一個指向該變數類型的指針,通俗點說,指針就是可以通過地址修改和獲取該變數的值,而&符號只是獲取該變數的地址!
指針中的「取地址符」
(9)c語言的取地址符是什麼字母擴展閱讀:
引用的聲明符放置在變數名的前面,和*操作符的用法一樣。
引用聲明完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。ra=1; 等價於 a=1;
聲明一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種數據類型,因此引用本身不佔存儲單元,系統也不給引用分配存儲單元。
故:對引用求地址,就是對目標變數求地址。&ra與&a相等。
#include<iostream>using namespace std;int main()
{ int m[10]={1,2,3,4,5,6,7,8,9,10}; int (&n)[10]=m; for(int i=0;i<10;i++) cout<<m[i]<<' ' ;
cout<<endl; for( i=0;i<10;i++) cout<<n[i]<<' ' ; cout<<endl; return 0;}
例如:
int*pointer;//建立一個指針
int*&p1=pointer;/*
正確,編譯系統把"int*"看成一體,把"&p1"看成一體,即建立指針pointer的引用,就是給指針pointer起別名p1。
int&*p2=pointer;//錯誤,這就變成了引用的指針。
㈩ &怎麼讀 c語言的取地址運算符。就是7那個鍵的那個符號。
1.scanf函數的一般形式
scanf(格式控制,地址表列)
int scanf(char *format[,argument,...]);
「格式控制」的含義同printf函數;「地址表列」是由若干個地址組成的表列,可以是變數的地址,或字元串首地址。
scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。
例題 scanf函數輸入數據。
#include<stdio.h>
void main(){
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
格式字元 說明
%a 讀入一個浮點值(僅C99有效)
%A 同上
%c 讀入一個字元
%d 讀入十進制整數
%i 讀入十進制,八進制,十六進制整數
%o 讀入八進制整數
%x 讀入十六進制整數
%X 同上
%c 讀入一個字元
%s 讀入一個字元串
%f 讀入一個浮點數
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 讀入一個指針
%u 讀入一個無符號十進制整數
%n 至此已讀入值的等價字元數
%[] 掃描字元集合
%% 讀%符號
附加格式說明字元表修飾符 說明L/l 長度修飾符 輸入"長"數據
h 長度修飾符 輸入"短"數據
W 整型常數 指定輸入數據所佔寬度
* 星號 空讀一個數據
hh,ll同上h,l但僅對C99有效。
(B) 空白字元空白字元會使scanf()函數在讀操作中略去輸入中的一個或多個空白字元,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。(C) 非空白字元一個非空白字元會使scanf()函數在讀入時剔除掉與這個非空白字元相同的字元。
註:scanf()控制串知識就介紹到這里(應該比較齊全了^_^),如有遺漏下次補上。下面將結合實際常式,一一闡述.三、 scanf()函數的控制串的使用例1.#include "stdio.h"
int main(void)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);return 0;
} 運行時按如下方式輸入三個值:3□4□5 ↙(輸入a,b,c的值)3,4,5 (printf輸出的a,b,c的值) (1) &a、&b、&c中的&是地址運算符,分別獲得這三個變數的內存地址。
(2) "%d%d%d"是按十進值格式輸入三個數值。輸入時,在兩個數據之間可以用一個或多個空格、tab鍵、回車鍵分隔。
以下是合法輸入方式:
① 3□□4□□□□5↙
② 3↙
4□5↙
③ 3(tab鍵)4↙
5↙
例2.#include "stdio.h"
int main(void)
{
int a,b,c;scanf("%d,%d,%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);return 0;
} 運行時按如下方式輸入三個值:3,4,5 ↙(輸入a,b,c的值)或者3,□4,□5 ↙(輸入a,b,c的值)3,□□□4,□5 ↙(輸入a,b,c的值)
......
都是合法的,但是","一定要跟在數字後面,如:
3□,4,□5 ↙就非法了,程序出錯。(解決方法與原因後面講)再如:1、sacnf()中的變數必須使用地址。 int a, b;
scanf("%d%d",a,b); //錯誤
scanf("%d%d",&a,&b);2、scanf()的格式控制串可以使用其它非空白字元,但在輸入時必須輸入這些字元。例:
scanf("%d,%d",&a,&b);
輸入: 3,4 ↙(逗號與"%d,%d"中的逗號對應)
scanf("a=%d,b=%d",&a,&b);
輸入: a=3,b=4 ↙("a=","b=",逗號與"%d,%d"中的"a=","b="及逗號對應)
3、在用"%c"輸入時,空格和「轉義字元」均作為有效字元。例:
scanf("%c%c%c",&c1,&c2,&c3);
輸入:a□b□c↙
結果:a→c1,□→c2,b→c3 (其餘被丟棄)
scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。問題二:scanf()函數不能正確接受有空格的字元串?如: I love you!
#include <stdio.h>
int main()
{
char str[80];
scanf("%s",str);
printf("%s",str); return 0;
}輸入:I live you!
輸出:I scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。所以,上述程序並不能達到預期目的,scanf()掃描到"I"後面的空格就認為對str的賦值結束,並忽略後面的"love you!".這里要注意是"love you!"還在鍵盤緩沖區(關於這個問題,網上我所見的說法都是如此,但是,我經過調試發現,其實這時緩沖區字元串首尾指針已經相等了,也就是說緩沖區清空了,scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中)。我們改動一下上面的程序來驗證一下:#include <stdio.h>
int main()
{
char str[80];
char str1[80];
char str2[80];
scanf("%s",str);/*此處輸入:I love you! */
printf("%s",str);
sleep(5);/*這里等待5秒,告訴你程序運行到什麼地方*/
scanf("%s",str1);/*這兩句無需你再輸入,是對鍵盤盤緩沖區再掃描 */
scanf("%s",str2);/*這兩句無需你再輸入,是對鍵盤盤緩沖區再掃描 */
printf("\n%s",str1);
printf("\n%s",str2);
return 0;
}輸入:I love you!
輸出:I
love
you!好了,原因知道了,那麼scanf()函數能不能完成這個任務?回答是:能!別忘了scanf()函數還有一個 %[] 格式控制符(如果對%[]不了解的請查看本文的上篇),請看下面的程序:#include "stdio.h"
int main()
{
char string[50];
/*scanf("%s",string);不能接收空格符*/
scanf("%[^\n]",string);
printf("%s\n",string);
return 0;
}問題三:鍵盤緩沖區殘余信息問題
#include <stdio.h>
int main()
{
int a;
char c; do
{
scanf("%d",&a);
scanf("%c",&c);
printf("a=%d c=%c\n",a,c);
/*printf("c=%d\n",c);*/
}while(c!='N');
} scanf("%c",&c);這句不能正常接收字元,什麼原因呢?我們用printf("c=%d\n",c);將C用int表示出來,啟用printf("c=%d\n",c);這一句,看看scanf()函數賦給C到底是什麼,結果是 c=10 ,ASCII值為10是什麼?換行即\n.對了,我們每擊打一下"Enter"鍵,向鍵盤緩沖區發去一個「回車」(\r),一個「換行"(\n),在這里\r被scanf()函數處理掉了(姑且這么認為吧^_^),而\n被scanf()函數「錯誤」地賦給了c.解決辦法:可以在兩個scanf()函數之後加個fflush(stdin);,還有加getch(); getchar();也可以,但是要視具體scanf()語句加那個,這里就不分析了,讀者自己去摸索吧。但是加fflush(stdin);不管什麼情況都可行。函數名: fflush
功 能: 清除一個流
用 法: int fflush(FILE *stream);#include <stdio.h>
int main()
{
int a;
char c; do
{
scanf("%d",&a);
fflush(stdin);
scanf("%c",&c);
fflush(stdin);
printf("a=%d c=%c\n",a,c); }while(c!='N');
} 這里再給一個用「空格符」來處理緩沖區殘余信息的示例:運行出錯的程序:#include <stdio.h>
int main()
{
int i;
char j;
for(i = 0;i < 10;i++)
{
scanf("%c",&j);/*這里%前沒有空格*/
}
}使用了空格控制符後:#include <stdio.h>
int main()
{
int i;
char j;
for(i = 0;i < 10;i++)
{
scanf(" %c",&j);/*注意這里%前有個空格*/
}
} 可以運行看看兩個程序有什麼不同。問題四 如何處理scanf()函數誤輸入造成程序死鎖或出錯?#include <stdio.h>
int main()
{
int a,b,c; /*計算a+b*/scanf("%d,%d",&a,&b);
c=a+b;
printf("%d+%d=%d",a,b,c);
}如上程序,如果正確輸入a,b的值,那麼沒什麼問題,但是,你不能保證使用者每一次都能正確輸入,一旦輸入了錯誤的類型,你的程序不是死鎖,就是得到一個錯誤的結果,呵呵,這可能所有人都遇到過的問題吧?解決方法:scanf()函數執行成功時的返回值是成功讀取的變數數,也就是說,你這個scanf()函數有幾個變數,如果scanf()函數全部正常讀取,它就返回幾。但這里還要注意另一個問題,如果輸入了非法數據,鍵盤緩沖區就可能還個有殘余信息問題。正確的常式:#include <stdio.h>
int main()
{
int a,b,c; /*計算a+b*/while(scanf("%d,%d",&a,&b)!=2)fflush(stdin);
c=a+b;
printf("%d+%d=%d",a,b,c);
自己網上學習啊,不要看都不看就問問題