指標重要觀念與口訣:(引用)
1.什麼"資料型態(data type)"就存什麼樣的"型態資料"。因此指標變數就是存記憶體位址
2.若宣告了一個指標變數時,就代表其資料型態是指標類型,因此這個變數存的內容就是記憶體,不管他本身原本是什麼型態,只要在程式理面使用該變數(不額外加符號),就是使用他的記憶體。就是上面強調的「什麼型態存什麼資料」。
3.指標(pointer) - 這個符號只有在宣告的時候才會出現,表示該變數是指標型態,其存的內容就是記憶體位址;可以想像成是一個「鎖」。
4.取值運算子(Dereference operator) - 在宣告以外時所有出現在變數前的都是這種(當然不包含乘法),表示依照這個變數所存的地址,去取得該記憶體位址理面存的值;可以想像成是把該變數的鎖打開的「鑰匙」。
5.「 & 」: 取址運算子(Address-of operator) - 取得某一變數本身存放的記憶體位址。
6.在使用指標之前,如果沒有進行記憶體配置的話,原則上初始值為NULL,要讓程式能動態配置一個記憶體,就必須使用malloc。
在Linux man pages中,malloc 的原型為以下所示:void *malloc(size_t size);
7.陣列與指標的轉換:
記憶體位址: &arr[i] == ptr+i
變數值存取: arr[i] == *(ptr+i)
* 稱之為 pointer to ...
[] 稱之為 array n of ...
() 稱之為 function returning ...
char * abc;
為宣告一abc的字串指標 非動態字串存取使用方式
若要取得其長度 可用 int Length = strlen(abc) 取得其長度
若abc為char*使用sizeof的話 回傳的是字串指標的大小 則為4 不是正確的使用方式
char abc[5]="ABCDE";
宣告一字元陣列長度為64 可使用strlen取得
也可以使用sizeof (abc)/(abc[0]); 去取得其長度
strlen 不可使用在char以外的地方 如 uint8_t之類的
#include
#include
#include
[Strlen與sizeof的差別]
void main(void)
{
int len, i;
char chararray[10];
len = strlen(chararray);
printf("chararray_len=%d.\r\n", len);//chararray_len=3.
int total_sizeof;
total_sizeof = sizeof(chararray);
printf("total_sizeof=%d.\r\n", total_sizeof);//One char equal with 1 byte. total_sizeof=10.
char a[] = "string";
len = sizeof(a);
for(i = 0; i<=len-1;i++)
{
printf("a[%d]=%c.\r\n",i, a[i]);
}
printf("chararray_len a=%d.\n", len);//size = 7.
char *p = "string";
len = sizeof(p);
for(i = 0; i<=len-1;i++)
{
printf("p[%d]=%c.\r\n",i, p[i]);
}
printf("chararray_len p=%d.\n", len);//size = 8. 7+1 (\0)
}
[運用strncpy防止爆掉]
#include
int main(void) {
char *src = "gkjsdh fkdshfkjsdhfksdjghf ewi7tr weigrfdhf gsdjfsd jfgsdjf gsdjfgwe";
char dst[10]; /* not enough for all of src */
strcpy(dst, src); /* BANG!!! */
strncpy(dst, src, sizeof dst - 1); /* OK ... but `dst` needs to be NUL terminated */
dst[9] = '\0';
return 0;
}
[回傳char array給一call function]
方法1.運用sprintf動態傳值取值
char* getPwd()
{
char* name="abc";
return name;
}
void main(char* pwd)
{
int len;
len = sprintf(pwd, "%s", getPwd());
}
方法2.for迴圈array賦予
void testfunc(char* input_data){
char str[10];
for(int i=0; i < 10; ++i){
input_data[i] = str[i];
}
}
程序员的c语言代码片段
回覆刪除比较两个字符串的最后一个实例