C語言中*和&的區別-程式碼實現說明
*是指標運算子,可以表示一個變數是指標型別;也可以表示一個指標變數的所指向的儲存單元,可以獲取某個地址儲存的值。
&是取地址符號,既取得某一個變數的地址
int *p=&a;
或
int *p;
p=&a;
表示將a的地址儲存在p內(取a的地址賦值給p)
int *b=&a;
int c=*b;
表示將指標b指向(*b)的儲存單元(a)賦值給c,此時的c只是一個新的變數,不能改變原有的a的值
例題程式碼:
////////////////////////////////////////////////////
//結構體的應用 //
//用結構體定義基本資訊 //
//包括姓名、性別、年齡、聯絡電話、地址 //
//設計輸入、輸出函式,引數為結構體指標變數 //
////////////////////////////////////////////////////
#include<stdio.h>
#include<stdlib.h>
//定義結構體
typedef struct
{
char name[8];
char sex[2];
int age;
char tel[11];
char addr[20];
}person;
//輸入函式
void setData(person *p) //指標傳遞
{
printf("請輸入姓名 性別 年齡 電話號碼 地址:" );
//疑問:該處char[]型別去掉&,程式正常執行???
scanf("%s %s %d %s %s",&p->name,&p->sex,&p->age,&p->tel,&p->addr);
}
//輸出函式
void getData(person p) //引數傳遞
{
printf("姓名:%s\n性別:%s\n年齡:%d\n電話號碼:%s\n地址:%s\n",p.name,p.sex,p.age,p.tel,p.addr);
}
void main()
{
person *p;
p=(person*)malloc(sizeof (person));
setData(p);
getData(*p); //*p取指標p所指的儲存單元
}
相關推薦
C語言中*和&的區別-程式碼實現說明
*是指標運算子,可以表示一個變數是指標型別;也可以表示一個指標變數的所指向的儲存單元,可以獲取某個地址儲存的值。 &是取地址符號,既取得某一個變數的地址 int *p=&a;
const在C和C++編譯中的區別(實現機制)
我們都知道在程式中用const,如果是變數,這表示該變數的值不能被修改,,,但是看下面一段C程式碼: 注意在用C編譯, #include <stdio.h> #include <stdlib.h> int main() { const i
c語言中#和##的用法
報錯 用法 == 預處理器 tor () name 文件 就是 一、一般用法 我們使用#把宏參數變為一個字符串,用##把兩個宏參數貼合在一起. 用法: #include<cstdio> #include<climits> using namespac
C語言AES加解密程式碼實現
#include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<unistd.h> #include<algorithm> us
C語言中 ++ 和 * 的優先順序
本來我想當然的以為在C語言中指標預算符的優先順序肯定比++高,後來在寫程式時發現並沒有這麼當然。在C語言中,自增運算子++和指標運算子*的優先順序關係為左++ > * > 右++比如 ++ *i 相當於 ++ (*i) ,指標i對應的變數+1。*i ++ 相當於
c語言中可變引數的實現
(一) 寫一個簡單的可變引數的C函式 下面我們來探討,如何寫一個簡單的可變引數的C函式。寫可變引數的C函式要在程式中用到以下這些巨集: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list
C語言中&&,||,&,| 的區別
&&:邏輯與,前後條件同時滿足表示式為真 ||:邏輯或,前後條件只要有一個滿足表示式為真 &:按位與 |:按位或 &&和||是邏輯運算,&與|是位運算 假如a = 0xaa ,b = 0x55 a&&b =
關於C語言中 || 和 &&的用法
||是邏輯或,例子如下 1 2 3 4 5 6 //表示式1||表示式2 //如果表示式1是true或者表示式2是true,整條式子的結果就是true,否則是false i
C++結構體、聯合、列舉與C語言中的區別
1.結構體的不同 (1)使用結構體型別定義結構體變數、指標時,可以省略struct關鍵字。 (2)C++中的結構體中可以定義函式,C語言不能。C++結構體中的函式成為成員函式。 結構體內部的函式可以直接訪問結構體中的變數 C++中的結構體和類基本相同
Java 自增(++) 和 C語言中自增的區別
%d 區別 但是 [] .cn cnblogs 微軟雅黑 自增 華麗 在Java、c語言等高級語言中自增和自減的作用基本一致,都是變量自身加一或減一。下面我只對自增進行說明,自減是類似的。 自增運算符(++),有兩種書寫形式,一個是在變量前: ++ num; 另一種
c語言中宏定義和常量定義的區別
沒有 int 符號表 cnblogs 格式 nbsp 參數 不同之處 區別 他們有共同的好處就是“一改全改,避免輸入錯誤”哪兩者有不同之處嗎?有的。 主要區別就在於,宏定義是在編譯之前進行的,而const是在編譯階段處理的 宏定義不占用內存單元而const定義的常量
GUN ARM彙編中標號的引用在彙編和C語言中區別(monitor_flash_len = _bss_start
u-boot/cpu/xx/start.S中: _TEXT_BASE: .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我設定為0xa170 0000 */ .globl _armboot_start _armboot_start: .w
C語言程式語言科技 c語言中的= 和= =有什麼區別?(精華篇)
一等賦,二等於。 C語言中,很多初學者經常會弄混 = 與 == 。我們從小學習數學時就知道“ = ”是 “等於”的意思,可是在C語言中,“ = ”就不是等於的意思了。 我寫了如下的C語言程式碼: 在上述C語言程式碼中,整型變數 a 的初始值是0。在兩個 if 語句判
C語言中的單引號和雙引號的區別
首先肯定地說,二者是有區別的,不是說用誰都一樣。 1、實質區別,代表的含義不同 'A'代表的是一個整數,而且這個整數對應的是編譯器所採用的字符集中的字元序列對應的數值。所以'A'跟ASCII中的65意義是相同的。 1 # include <iostream>
c語言中實現超連結(多檔案程式的編譯和連線)
一個實用價值的c語言應用程式往往較大,需要劃分成不同的檔案,那麼如何把這些檔案編譯,連線成一個統一的可執行的檔案並執行呢? c語言提供了編譯預處理“#include“檔名””來實現‘檔案包含”的操作,其特點是一個原始檔可以將另外一個原始檔的全部包含進來。預處理程式將#i
C語言中的 指標常量(*const)和常量指標(const*)的區別(很重要!!!)
參考連結:https://blog.csdn.net/qiu931110/article/details/80580295 這個哥們講的還可以,但是我想用白話在描述一下,方便理解: const限定符作用於指標 常量指標(先常量限制符號,在指標符號,co
全程剖析C語言中堆和棧的區別
1.申請方式 (1)棧(satck):由系統自動分配。例如,宣告在函式中一個區域性變數int b;系統自動在棧中為b開闢空間。 (2)堆(heap):需程式設計師自己申請(呼叫malloc,realloc,calloc),並指明大小,並由程式設計師進行釋放。容易產生memory leak. eg:
C語言中宣告、定義和初始化的區別
函式和變數(全域性變數)都有宣告和定義, 對於函式而言: 同一檔案內,如果函式fun_1呼叫fun_2時,如果fun_2在fun_1之後定義,則需在fun_1之前對fun_2進行宣告,如下: void fun_2();// 宣告 void fun_1() { ... fu
C語言中堆和棧的區別
格式和部分內容稍作修改。 在計算機領域,堆疊是一個不容忽視的概念,我們編寫的C語言程式基本上都要用到。但對於很多的初學著來說,堆疊是一個很模糊的概念。堆疊:一種資料結構、一個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一
C語言中的靜態變數和普通變數的區別
下面用程式碼說明: 一個可執行程式包括BSS段、資料段、程式碼段(文字段)。 bss segment ,data segment ,code/text segment ①BSS(Block by Start Symbol) :通常指用來存放程式中未初化的全域性變數和靜態變數