C語言第四篇:指標的辨析
一、基礎
地址:記憶體區的每一個位元組都有一個編號,這個編號就稱為地址。
指標:一個變數的地址稱為指標。
指標變數:專門用來存放指標(一個變數的地址)的變數稱為指標變數。
定義方法:
基型別 *指標變數名;
如:int *p1; float *p2;
二、疑難
1、記憶體單元的存取/訪問方式
(1)直接訪問——通過變數名訪問,如:printf("%d\n",a);
(2)間接訪問——通過指標變數訪問,如:printf("%d\n",*p);
2、指標運算子與取地址運算子
*p——指標變數p所指向的儲存空間(裡面的值)
&p——指標變數p的地址
&*p——就是p指標
*&p——就是p指標
下面用一段程式程式碼來辨析以上表示式:
測試程式碼:
/*
*Copyright (c)2016,劉兵馬俑
*All rights reserved.
*檔名稱:main.c
*作 者:劉兵馬俑
*完成日期:2016/03/22
*版 本 號:v1.0
*問題描述:C語言的指標運算子與取地址運算子辨析
*程式輸出:不同表示式的值
*/
#include <stdio.h>
int main( )
{
//定義整型變數和整型指標
int a=1;
int *pointer=&a;
//輸出整型變數的值以及指標的初始值
printf("整型變數 a = %d\n",a);
printf("指標變數 pointer = 0x%0x(&a)\n\n",&a);
//輸出需要辨析的表示式
printf("a —— %d \n",a) ;
printf("&a —— 0x%0x \n",&a) ;
printf("*&a —— %d \n",*&a) ;
printf("pointer —— 0x%0x \n",pointer) ;
printf("&pointer —— 0x%0x \n",&pointer) ;
printf("*pointer —— %d \n",*pointer) ;
printf("&*pointer —— 0x%0x \n",&*pointer);
printf("*&pointer —— 0x%0x \n",*&pointer);
return 0;
}
結論:*和& 是一對互逆運算子
三、指標變數使用禁忌——野指標
野指標情況(一)—— 指標使用前未初始化
若指標定義時未初始化,則不能使用“*p=10;”對p指標所指向的記憶體單元賦值,原因是指標必須在指向明確的前提下才能對其賦值。
野指標情況(二)—— 不能用整數為指標變數賦值,如:
int *p;
p=0x100000;
這是錯誤的。
總之,OS對於記憶體空間的管理是十分嚴格的。
相關文章
- c語言函式指標的定義C語言函式指標
- C語言:陣列和指標的區別C語言陣列指標
- C語言學習筆記之指標的運算C語言筆記指標
- C語言void指標的運算操作[小知識]C語言指標
- 聊聊C語言和指標的本質C語言指標
- C語言 C語言野指標C語言指標
- 詳解c++指標的指標和指標的引用C++指標
- C/C++指向指標的指標C++指標
- C語言(指標)C語言指標
- C語言指標C語言指標
- C語言ftell()函式:獲取檔案讀寫指標的當前位置C語言函式指標
- C語言-指標操作C語言指標
- 嵌入式學習資源——深入理解C語言指標的奧秘-2C語言指標
- 嵌入式學習資源——深入理解C語言指標的奧秘-1C語言指標
- c語言指標彙總C語言指標
- C語言指標學習C語言指標
- c語言指標詳解C語言指標
- C語言指標筆記C語言指標筆記
- C語言基礎-指標C語言指標
- C語言 函式指標C語言函式指標
- C語言:指標,C的靈魂C語言指標
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- 搞清楚C語言指標C語言指標
- C語言 指標與陣列C語言指標陣列
- C語言指標基本知識C語言指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言指標用法大全C語言指標
- c語言實現this指標效果C語言指標
- C語言指標細節_1C語言指標
- 指標——C語言的靈魂指標C語言
- C語言基礎-1、指標C語言指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- 各種語言中對指標的叫法指標
- C++ 中 this 指標的用法詳解C++指標
- C++引用比指標的好處C++指標
- C++引用與指標的比較C++指標