C 字串陣列和char*指標在做&操作時的區別
在做HMAC編碼時發現一個詭異的問題,結果是由於C 字串陣列和char*指標在做&操作時的區別導致的,HMAC編碼時發現的問題見這裡。本文介紹C 字串陣列和char*指標在做&操作時的區別。
上面的程式碼的一次執行結果是:#include <string.h> #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int main(int argc, char * argv[]) { char buff[] = "hello"; printf("buff: %p\n", buff); printf("&buff: %p\n", &buff); for(int i = 0; i < strlen(buff) + 1; ++i) { printf("%-03x", (unsigned int)buff[i]); } cout << endl; char * pBuff = (char *)malloc(strlen("hello") + 1); memset(pBuff, 0, strlen("hello") + 1); strcpy(pBuff, "hello"); cout << "pBuff: " << pBuff << "~" << endl; printf("pBuff: %p\n", pBuff); printf("&pBuff: %p\n", &pBuff); free(pBuff); return 0; }
buff: 0x7fffde8fe990
&buff: 0x7fffde8fe990
68 65 6c 6c 6f 0
pBuff: hello~
pBuff: 0x7ef010
&pBuff: 0x7fffde8fe988
這說明,對於陣列char buff[] = "hello",將buff 和 &buff 用指標形式輸出,結果是一樣的!而對於指標pBuff,將pBuff 和 &pBuff 用指標形式輸出,結果是不一樣的!
後者好理解,“指標的值”和“存放指標變數的地址”當然不能指望它們是一樣的了,除非這個指標指向它自己!
對於陣列char buff[] = "hello"
相關推薦
C 字串陣列和char*指標在做&操作時的區別
在做HMAC編碼時發現一個詭異的問題,結果是由於C 字串陣列和char*指標在做&操作時的區別導致的,HMAC編碼時發現的問題見這裡。本文介紹C 字串陣列和char*指標在做&操作時的區別。 #include <string.h> #inclu
char a[](字串陣列)和char *a(字串指標)區別
在C語言中,對字串的操作主要有兩種方式,一是使用字元陣列,char str[];二是使用字元指標。那麼二者有什麼區別呢?下面將分述二者的使用,最後進行比較。 一、字元陣列 使用char str[]定義一個字元陣列str,中括號內可以寫上數字表示陣列大
char陣列和char指標的使用區別和一些注意事項
const用法 const char* p;表示p是一個指向常量字元的指標 char* const p;表示p是一個指向字元的常量指標,p是不允許改變的 另外要注意的是 const char* p等價於 char const *p 也就是說const描述char和*p是等價的
c++物件陣列和this指標
當程式需要建立同一個類的多個物件時,可以建立物件陣列,宣告物件陣列的方法和宣告標準型別陣列相同,且陣列用法也相同。 宣告:Stock mystuff[4]; 初試化:Stock stocks[4]= { Stock("WANG",1,2), Stock("zhang",2,
C語言char*字串陣列和unsigned char[]陣列的相互轉換
#include <iostream> #include <string> using namespace std; void convertUnCharToStr(char* str, unsigned char* UnChar,
c/c++ 字元陣列、字元指標和字串型別
一、字元陣列 定義:用來存放字元資料的陣列是字元陣列,字元陣列中的一個元素存放一個字元。字元陣列具有陣列的共同屬性。 初始化方式: 1 charc[10]={'0','1','2','3','4','5','6','7','8','9'}; 注:當初值個數小於規定長度
C# 位元組陣列和字串 互轉
本章講述:部分資料型別,格式轉換(十六進位制字串和位元組陣列 互轉 位元組陣列和字串 互轉) public class HexConverter { #region 格式轉換 /// <summary> /// 轉換十六進位制
C語言二級陣列和二級指標
轉載部落格:https://www.cnblogs.com/zou107/p/4909847.html 一、關於二維陣列和二維陣列區別 (1)一維陣列在記憶體中是連續分佈儲存的,同樣,二維陣列也是在記憶體連續儲存的。所以從記憶體的角度來分析,一維陣列和二維陣列其實沒有本質區
C++中陣列和指標之間的關係梳理
C++中陣列和指標是兩個十分常用且關係密切的資料結構,“陣列即指標,指標即陣列”的言論一直層出不窮。從本質上講,陣列和指標是不同的,陣列是具有確定數量的元素,而指標只是一個標量值。但是,在某些情況下陣列和指標又能相互轉換。下面,將從多個角度分析陣列和指標。 1. 陣列和指標互相轉換 陣列
C++及C中的 string char指標及char陣列
之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函式足以完成我們大多數情況下的需要. 下面我們首先從一些示例開始學習下string類的使用. 1) #include <string&
char陣列 、char指標與字串常量的比較
陣列不是基本型別,不能直接參與比較,陣列與字串及字元指標與字串比較其實比較的是二者的地址。 例: int isequiv(char *t) { if (t == "char") return 1; else return 0; } int main() { char te
C#: 字串string和位元組陣列byte[]的轉換
string轉byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]轉string: string str = System.Text.Encoding.Default.GetStri
c語言用字元陣列和字元指標刪除相同字元
如何用字元陣列和字元指標做引數刪除與某字元相同的字元 1.用字元陣列 char *DelLetter1(char str1[],char a) //用字元陣列刪除 { int i = 0; int c = 0; char *b = (char*)malloc((s
C語言------如何實現字串陣列和整形陣列在終端上任意輸
我是新手, 學習C語言過程中,練習程式設計時常會遇到輸入任意字串(不越界的情況下任意輸入),或者是輸入任意長度的整形陣列,下面就是我的一些關於任意字串和陣列輸入程式碼的整理. 1. 字串
c語言的字元陣列和字元指標
這幾天搞Unix上的C程式,裡面用到了很多字元陣列和字串指標,我記得在學完C語言後相當一段時間裡,對指標這個東西還是模模糊糊,後來工作也沒怎麼用到過C,雖然網上這類的文章也有很多,還是決定自己在這做個小總結,也算加深下自己的印象,寫了下面的測試程式: #inclu
c++ primer plus書之--c++函式, 陣列引數與指標的關係2
陣列怎麼在函式的引數中進行傳遞: // simple function #include "iostream" using namespace std; const int Size = 8; // 函式原型, 可以不寫變數名, 變數名也可以與函式定義的變數名不同 int sum_arr(in
C++ premier plus書之--C++函式, 陣列引數與指標的關係1
C++的實參和形參 double cube(double x); int main() { int a = 5; cube(a); } 這裡a被稱為實參, x被稱為形參, 形參就是用於接收傳遞值的變數,
C++實現陣列和連結串列的排序演算法
OK,我們經常會用到排序演算法。那麼,常用的排序演算法,除了使用陣列之外,用連結串列又該如何處理呢?下面我們來做個對比: //使用插入排序對陣列進行排序 int *get_order(int *num, int length) { for(int eiter = 1; eiter <
C語言陣列型函式指標,替代switch case結構
#include <stdio.h> typedef void (*KeyEvent)(void); KeyEvent pKey_Func[100]; void pFunc0(void) { printf(“Hello Kitty\n”); } void pFun
c#字串簡寫和全稱比對
需求:涉及到單位名稱之類的字串,會用到簡寫,如果需要和全稱比對,對坐入號 解決方法: var danwei = “財政經濟委員會” char[] dw = danwei.ToCharArray(); //假設簡寫是“財經委” var danweis =